Пользователей: 0
Гостей: 370
Всего: 370

» Подробно
Привет, гость!








Автор Сообщение
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
19-08-2010 23:51 GMT3 час. #1321796   
singapur22
Вот не заметил - тут же другой итератор у тебя. А он как я понял просто берет предметы из общего массива объектов инвентаря. По сути являясь аналогом варианта:
local cnt = st:object_count()
for i=0,cnt-1 do
local item = st:object(i)
...
end

отредактировал(а) erlik: 20-08-2010 00:01 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
20-08-2010 00:04 GMT3 час. #1321803   
erlik
"Спасибо" за пояснение.:-)
Если брать принципиально - то ты, конечно прав.
Для значения в таблице всегда существует ключ. И это истина.
Так что можно **50316ea8aab1bb10eeba**


Не стань номинантом премии Дарвина.
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 00:17 GMT3 час. #1321808   
erlik Хех. На счёт метода iterate_inventory, не угадал. Это итератор удаления предметов. Поясню как она**50016ea8aab1bb10eeba**== "medkit" then
return false
else
return true
end

end,
db.actor)[/code]

Тоесть, если функция фозвращает false, то объект удаляется. Вот как. :-P

Причём удаление производит только у трупов и в инвентарных ящиках. :blink

добавлено спустя 3 минут

Gun12 Неее. В инвентаре счёт начинается с нуля, потому и:

[code]for i=0,cnt-1 do[/code]

Иначе потом придётся единицу отнимать. А если i используется несколько раз за цикл? Тогда единицу придётся отнимать все эти несколько раз. А это уже критично. ;-)

отредактировал(а) singapur22: 20-08-2010 00:45 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
    
Посты: 2690
Откуда:
Возраст:
20-08-2010 00:45 GMT3 час. #1321815   
Gun12

если это сделано в С, то и копать нужно в С (Кто-то будет это делать?)

Проблема не в языке, с хорошими знаниями Lua, любой код на C (пожалуй все же без примочек в виде C++) будет понятен любому. Похожие принципы, конечно, со своими особенностями / ловушками, но тем не менее. Главное найти что "ковырять".


Gun12
    
Посты: 773
Откуда: СССР
Возраст: 52
20-08-2010 00:51 GMT3 час. #1321817   
singapur22
Опять же, если брать принципиально то эта функция ниче

отредактировал(а) Gun12: 20-08-2010 01:01 GMT3 час.

Не стань номинантом премии Дарвина.
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 01:00 GMT3 час. #1321818   
Gun12 Ну если её использовать как ты написал, то конечно, она будет производить пустой **50016ea8aab1bb10eeba**if item:section() == "medkit" then
return false
else
return true
end

end, npc)[/code]

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

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

Мдя. Поспешил с выводами. Извиняюсь. :-G
Ничерта она не удаляет. Перепробывал все возможные варианты. Кроме обычного перебора, ничего нового не заметил. Правда в отличии от inventory_for_each, данный метод производит прогон по всем предметам, включая болт, пда, детектор и фонарик.
Обманули гады!!! Зачем тогда было писать ложное описание метода? Не понимаю.

отредактировал(а) singapur22: 20-08-2010 01:27 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
    
Посты: 2690
Откуда:
Возраст:
20-08-2010 01:25 GMT3 час. #1321820   
Gun12
Как я понимаю сам движок располагается в папочке bin в виде кучки динамических библиотек (и судя по всему написанных на C++), "главная" из которых - xrGame.dll, предоставляет основной интерфейс ко всему функционалу движка, в т.ч и через luabind скриптам на Lua. Исходники xrGame.dll закрыты, что весьма логично, а значит и получить доступ из вне, ко всему ее функционалу не так то просто и без дезасемблирования, я бы даже сказал, невозможно. Т.е проблема как к этому "С++" добраться, а уж понять как что работает и изменить под себя - дело второе.


singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 01:32 GMT3 час. #1321823   
Cos Ну дизассемблер иметь мало, нужно ещё им уметь пользоваться, в том числе и знать язык ассемблера. У меня IDA PRO стоит уже года три, может чуть меньше. Юзаю часто, но толку от этого мало. Обычно чисто выявить нужные мне методы и классы, не более того.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Cos
    
Посты: 2690
Откуда:
Возраст:
20-08-2010 01:43 GMT3 час. #1321824   
singapur22
Естественно, сказать "дизасемблировать" легко, сделать трудно. Особенно когда создатель программы этого не хочет и встраивает в свои решения различного рода защиты.
А уж потом как перевести готовое с ассемблера на языки более высокого уровня - проблема другая.

отредактировал(а) Cos: 20-08-2010 06:56 GMT3 час.

Mehanik Yar
    
Посты: 469
Откуда: Уфа
Возраст:
20-08-2010 07:46 GMT3 час. #1321860   
Всем прив. Хотелось бы узнать как удалить с локации с помощью инфопоршня заспавненный объект? Скажите плиз.

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

отредактировал(а) Mehanik Yar: 20-08-2010 08:01 GMT3 час.

djslavikoz
    
Посты: 123
Откуда:
Возраст: 41
20-08-2010 07:47 GMT3 час. #1321862   
Нужна помощ. Может не в тему. Но лог показывает на скрипт.


FATAL ERROR

[error]Expression : fatal error
[error]Function : CScriptEngine::lua_error
[error]File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp
[error]Line : 73
[error]Description :
[error]Arguments : LUA error: ...w of chernobyl\gamedata\scripts\sim_statistic.script:12: attempt to index field 'monster_classes' (a nil value)

Я спавнил крыс.Было всё нормально пока не убил её, сразу вылет при убийстве.Покажу файлы
xr_statistic.script


local killCountProps = {
neutral_novice = 1, neutral_experienced = 2, neutral_veteran = 3, neutral_master = 4,
monolith_novice = 1, monolith_experienced = 2, monolith_veteran = 3, monolith_master = 4,
military_novice = 1, military_experienced = 2, military_veteran = 3, military_master = 4,
killer_novice = 1, killer_experienced = 2, killer_veteran = 3, killer_master = 4,
ecolog_novice = 1, ecolog_experienced = 2, ecolog_veteran = 3, ecolog_master = 4,
dolg_novice = 1, dolg_experienced = 2, dolg_veteran = 3, dolg_master = 4,
freedom_novice = 1, freedom_experienced = 2, freedom_veteran = 3, freedom_master = 4,
bandit_novice = 1, bandit_experienced = 2, bandit_veteran = 3, bandit_master = 4,
zombied_novice = 1, zombied_experienced = 2, zombied_veteran = 3, zombied_master = 4,

tushkano_normal = 2,
flesh_weak = 1, flesh_normal = 2, flesh_strong = 3,
boar_weak = 1, boar_normal = 2, boar_strong = 3,
cat_weak = 1,
burer_weak = 1, burer_normal = 2, burer_strong = 3,
fracture_weak = 1, fracture_normal = 2, fracture_strong = 3,
chimera_weak = 1, chimera_normal = 2, chimera_strong = 3,
zombie_weak = 1, zombie_normal = 2, zombie_strong = 3,
dog_weak = 1, dog_normal = 2, dog_strong = 3,
pseudodog_weak = 1, pseudodog_normal = 2, pseudodog_strong = 3,
psy_dog_weak = 1, psy_dog_normal = 2, psy_dog_strong = 3,
snork_weak = 2, snork_normal = 3, snork_strong = 4,
poltergeist_weak = 2,
pseudo_gigant_weak = 4,
controller_weak = 4,
bloodsucker_weak = 1, bloodsucker_normal = 2, bloodsucker_strong = 3,
gigant_weak = 2,
rat_weak =2

}

local sect_alias = {
burer_normal = "burer_weak",
burer_strong = "burer_weak",
fracture_normal = "fracture_weak",
fracture_strong = "fracture_weak",
chimera_normal = "chimera_weak",
chimera_strong = "chimera_weak",
poltergeist_normal = "poltergeist_weak",
poltergeist_strong = "poltergeist_weak",
pseudo_gigant_normal = "pseudo_gigant_weak",
pseudo_gigant_strong = "pseudo_gigant_weak",
controller_normal = "controller_weak",
controller_strong = "controller_weak",
psy_dog_weak = "psy_dog",
psy_dog_normal = "psy_dog",
psy_dog_strong = "psy_dog",
gigant_weak = "gigant_weak",
zombie_weak = "zombie_weak", zombie_normal = "zombie_normal", zombie_strong = "zombie_strong",
tushkano_normal = "tushkano_normal",
flesh_weak = "flesh_weak", flesh_normal = "flesh_normal", flesh_strong = "flesh_strong",
cat_weak = "cat_weak",
bloodsucker_weak = "bloodsucker_weak", bloodsucker_normal = "bloodsucker_normal", bloodsucker_strong = "bloodsucker_strong",
boar_weak = "boar_weak", boar_normal = "boar_normal", boar_strong = "boar_strong",
snork_weak = "snork_weak", snork_normal = "snork_normal", snork_strong = "snork_strong",
dog_weak = "dog_weak", dog_normal = "dog_normal", dog_strong = "dog_strong",
pseudodog_weak = "pseudodog_weak", pseudodog_normal = "pseudodog_normal", pseudodog_strong = "pseudodog_strong",
rat_weak = "rat_weak"

}


monster_classes = {
[clsid.tushkano_s ] = "tushkano",
[clsid.flesh_s ] = "flesh",
[clsid.boar_s ] = "boar",
[clsid.cat_s ] = "cat",
[clsid.zombie_s ] = "zombie",
[clsid.burer_s ] = "burer",
[clsid.fracture_s ] = "fracture",
[clsid.chimera_s ] = "chimera",
[clsid.dog_s ] = "dog",
[clsid.pseudodog_s ] = "pseudodog",
[clsid.psy_dog_s ] = "psy_dog",
[clsid.psy_dog_phantom_s] = "NIL",
[clsid.snork_s ] = "snork",
[clsid.poltergeist_s ] = "poltergeist",
[clsid.gigant_s ] = "pseudo_gigant",
[clsid.controller_s ] = "controller",
[clsid.bloodsucker_s ] = "bloodsucker",
[clsid.rat_s ] = "rat"



}


function addKillCount(npc)
local props, sect = getNpcType(npc)
if props == nil then
return
end

local sect_name
if sect_alias[sect] ~= nil then
sect_name = sect_alias[sect]
else
sect_name = sect
end

if killCountProps[sect_name] == nil then
print_table(sect_alias)
abort("Statistic ERROR: required section [%s] not present, based [%s]", tostring(sect_name), tostring(sect))
end
actor_stats.add_points(props, sect_name, 1, killCountProps[sect_name])
db.actor:set_character_rank(db.actor:character_rank() + killCountProps[sect_name])


end


function getNpcType(npc)
if IsStalker(npc) then
local community = "neutral"
if npc:character_community() == "monolith" then community = "monolith"
elseif npc:character_community() == "military" then community = "military"
elseif npc:character_community() == "killer" then community = "killer"
elseif npc:character_community() == "ecolog" then community = "ecolog"
elseif npc:character_community() == "dolg" then community = "dolg"
elseif npc:character_community() == "freedom" then community = "freedom"
elseif npc:character_community() == "bandit" then community = "bandit"
elseif npc:character_community() == "zombied" then community = "zombied"
elseif npc:character_community() == "fracture" then community = "fracture"
elseif npc:character_community() == "burer" then community = "burer"
elseif npc:character_community() == "chimera" then community = "chimera"
elseif npc:character_community() == "poltergeist" then community = "poltergeist"
elseif npc:character_community() == "gigant" then community = "gigant"
elseif npc:character_community() == "controller" then community = "controller"
elseif npc:character_community() == "tushkano" then community = "tushkano"
elseif npc:character_community() == "flesh" then community = "flesh"
elseif npc:character_community() == "cat" then community = "cat"
elseif npc:character_community() == "bloodsucker" then community = "bloodsucker"
elseif npc:character_community() == "boar" then community = "boar"
elseif npc:character_community() == "snork" then community = "snork"
elseif npc:character_community() == "dog" then community = "dog"
elseif npc:character_community() == "pseudodog" then community = "pseudodog"
elseif npc:character_community() == "rat" then community = "rat"


end
local rank = ranks.get_obj_rank_name(npc)
return "stalkerkills", community.."_"..rank
else
local community = monster_classes[get_clsid(npc)]
if community == nil then
abort("Statistic ERROR: cannot find monstr class for [%s]", npc:name())
end

if community == "NIL" then
return nil,nil
end

local rank = ranks.get_obj_rank_name(npc)
return "monsterkills", community.."_"..rank
end
end



m_rat.ltx

[[rat_group]
GroupControlSection = spawn_group
$spawn = "monsters\rat-group" ; option for Level Editor
$npc = on ; option for Level Editor
Human = off ; option for ALife Simulator
class = AI_RAT_G ; AI class
monster_section = m_rat_e

[m_rat_e]:monster_base
GroupControlSection = spawn_group
$spawn = "monsters\rat" ; option for Level Editor
$npc = on ; option for Level Editor
$prefetch = 128
visual = monsters\rat\rat_1
corpse_visual = monsters\rat\rat_1


icon = ui_npc_monster_tushkano

Scheduled = on ; option for ALife Simulator
Human = off ; option for ALife Simulator
Health = 15 ; option for ALife Simulator
MinSpeed = 1.0 ; option for ALife Simulator
MaxSpeed = 1.5 ; option for ALife Simulator
going_speed = 1.0 ; option for ALife Simulator
retreat_threshold = 0.2
eye_fov = 170
eye_range = 10
max_hear_dist = 50
MaxHealthValue = 15 ; range [0..200]
hit_power = 5
hit_type = wound
transparency_threshold = 1.0
DynamicObjectsCount = 32
DynamicSoundsCount = 32

smart_terrain_choose_interval = 20:00:00

killer_clsids = Z_MINCER,Z_GALANT,ZS_BFUZZ,ZS_MBALD,ZS_GALAN,ZS_MINCE

ef_creature_type = 1 ; option for evaluation functions
ef_weapon_type = 1
ef_detector_type = 1
panic_threshold = 0.1

idle_sound_delay = 80000
eat_sound_delay = 4000
attack_sound_delay = 8000

cform = skeleton ; collision class
;class = AI_RAT ; AI class
class = SM_TUSHK ; AI class


ph_box0_center = 0.0, 0.11, -0.22
ph_box0_size = 0.085, 0.11, 0.525
ph_box1_center = 0.0, 0.11, -0.22
ph_box1_size = 0.085, 0.11, 0.525
ph_crash_speed_min = 10
ph_crash_speed_max = 30
ph_collision_damage_factor = 0.1
ph_mass = 2
cost = 5

destroyed_vis_name = physics\Dead_Body\trupik_crash

script_binding = bind_monster.bind

;---------------------------------------------------------------------
ph_skeleton_airr_lin_factor = 2.0 ;550.0 (изменно из-за того, что убрано домножение коэффициент 0.002 из кода)
ph_skeleton_airr_ang_factor = 0.0 ;0.0 (изменно из-за того, что убрано домножение на коэффициент 0.3 из кода (0.0*0.3=0.0))
ph_skeleton_hinger_factor1 = 1.0 ;1.0 (изменно из-за того, что убрано домножение на коэффициент 5.0 из кода)
ph_skeleton_ddelay = 15.0 ;Время изменения значения трения в суставе с момента создания шелла, сек

ph_skel_fatal_impulse_factor = 6.0
ph_after_death_velocity_factor= 0.75
ph_skel_shot_up_factor = 0.25
;---------------------------------------------------------------------

attack_params = m_resp_rat_attack_params
step_params = m_resp_rat_step_params

ImpulseMin = 20.0
ImpulseMax = 35.0

; speed factors linear | angular_real | angular_path | min | max
Velocity_Stand = 0, 3.5, 3.5, 1, 1
Velocity_WalkFwdNormal = 1.0, 7.5, 7.5, 0.02, 1.8
Velocity_RunFwdNormal = 5.0, 3.5, 3.5, 0.3, 1
Velocity_WalkFwdDamaged = 1.0, 4.5, 4.5, 0.2, 1.8
Velocity_RunFwdDamaged = 3.0, 3.0, 3.0, 0.5, 1
Velocity_Drag = 1.0, 3.0, 3.0, 1, 1
Velocity_Steal = 1.5, 3.0, 3.0, 1, 1

; acceleration
Accel_Generic = 1.5
Accel_Calm = 2.5
Accel_Aggressive = 7.5

;attack parameters
MinAttackDist = 1.2 ;0.5
MaxAttackDist = 1.8 ;3.8

as_min_dist = 0.25
as_step = 0.25

DayTime_Begin = 0 ; эрўрыр фэ  фы  ьюэёЄЁр
DayTime_End = 21 ; ъюэхЎ фэ  фы  ьюэёЄЁр
Min_Satiety = 0.4 ; ьшэ. эюЁьр ёvЄюёЄш (ьхэ№°х - єцх уюыюфэvщ)
Max_Satiety = 1.0 ; ьръё. эюЁьр ёvЄюёЄш (сюы№°х - юўхэ№ ёvЄvщ)

distance_to_corpse = 1.2 ; фшёЄ. фю ЄЁєяр, яЁш ъюЄюЁющ юэ яхЁхїюфшЄ т ёюёЄю эшх хфv


min_view_distance = 0.8 ; коэффициент, который множится на eye_range, в зависимости от угла
max_view_distance = 1.0 ; коэффициент, который множится на eye_range, в зависимости от угла
visibility_threshold = 100.0 ; значение, при достижении суммой которого объект считается видимым
always_visible_distance = 0.3
time_quant = 0.001
decrease_value = 0.01 ; значение, на которое уменьшается вес, если объект попал в фрустум, но отсёкся по каким-то причинам
velocity_factor = 0.5
luminocity_factor = 0.5 ; фактор освещения (только для Актёра)


;открытые раны
bleeding_v = 0 ;потеря крови при номинальной ране в секунду
wound_incarnation_v = 0.0 ;крутизна кривой заживления (какой процент раны останется после заживления в игровую секунду)
min_wound_size = 0.01


bone_torso = bip01_spine1 ; bone name
bone_head = bip01_head ; bone name
bone_fire = bip01_head ; bone name
weapon_usage = 0 ; boolean

LegsCount = 2

EyeYShift = .15 ; meters

MinVoiceInterval = 30000 ; milliseconds
MaxVoiceInterval = 120000 ; milliseconds
VoiceRefreshRate = 2500 ; milliseconds

sound_idle = monsters\tushkano\tushkano_idle_
sound_eat = monsters\tushkano\tushkano_eat_
sound_aggressive = monsters\tushkano\tushkano_aggressive_
sound_attack_hit = monsters\tushkano\tushkano_attack_
sound_take_damage = monsters\tushkano\tushkano_pain_
sound_die = monsters\tushkano\tushkano_death_
sound_threaten = monsters\tushkano\tushkano_threaten_
sound_landing = monsters\tushkano\tushkano_pain_ ;monsters\tushkano\tush_idle_
sound_steal = monsters\beeps_ ;monsters\tushkano\tush_idle_
sound_panic = monsters\tushkano\tushkano_panic_
sound_growling = monsters\beeps_ ;monsters\tushkano\tush_idle_
sound_die_in_anomaly = monsters\tushkano\tushkano_anomaly_

ChangeActiveStateProbability = 1.0 ; range [0..1]
ActiveCountPercent = 16 ; percents
StandingCountPercent = 16 ; percents
PassiveScheduleMin = 100 ; microseconds
PassiveScheduleMax = 1000 ; microseconds

LostMemoryTime = 20000 ; milliseconds
LostRecoilTime = 2000 ; milliseconds
UnderFireDistance = 100 ; meters
RetreatTime = 10000 ; milliseconds
RetreatDistance = 100 ; meters
AttackStraightDistance = 10 ; meters
StableDistance = 5 ; meters
WallMinTurnValue = 90 ; degrees
WallMaxTurnValue = 270 ; degrees

AngleSpeed = 0.2 ; degrees per second
GoalChangeDelta = 10.0 ; seconds
GoalVariation = 10.0, 0.0, 20.0 ; each coordinate in meters
AngularStandSpeed = 360 ; degrees
AngularMinSpeed = 360 ; degrees
AngularMaxSpeed = 30 ; degrees
AngularAttackSpeed = 10 ; degrees

MoraleDeathDistance = 50 ; meters
SoundThreshold = 0.06 ; range [0..1]

ActionRefreshRate = 500 ; milliseconds
MaxHealthValue = 15 ; range [0..200]

EatMemberCorpses = 1 ; range {0,1}
Cannibalism = 1 ; range {0,1}
EatCorpseInterval = 600000 ; milliseconds

corp_mass = 500 ;



;terrain = 3,255,255,255,30,60, 4,255,255,255,30,60, 11,255,255,255,30,60, 12,255,255,255,30,60, 13,255,255,255,30,60, 14,255,255,255,30,60, 15,255,255,255,30,60
;terrain = 1,255,255,255,30,60, 2,255,255,255,30,60, 3,255,255,255,30,60, 4,255,255,255,30,60
;terrain = 255,255,255,255,30,40
terrain = rats_terrain

immunities_sect = rat_immunities

;inventory item information
cost = 0
inv_name = "dead rat"
inv_name_short = "rat"
inv_weight = 1.0 ;.5


inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 8
inv_grid_y = 13
inv_weight = 0.5
food_value = 10

; eatable item
eat_health = -0.1
eat_satiety = 0.2
eat_power = -0.05
eat_radiation = 0.01 ;0.03;
wounds_heal_perc = 0
eat_portions_num = -1

hit_type = wound

;entity condition

satiety_v = 0.0001 ;0.01 ;скорость уменьшения сытости со временем
radiation_v = 0.00001 ;0.004 ;скорость уменьшения радиации
satiety_power_v = 0.001 ;0.01 ;увеличение силы при уменьшении сытости
satiety_health_v = 0.001 ;0.03 ;увеличение здоровья при уменьшении сытости
satiety_critical = -1.0 ;0.25 ;критическое значения сытости (в процентах от 0..1) когда здоровье начианает уменьшаться
radiation_health_v = 0.01 ;0.006 ;уменьшение здоровья при воздействии радиации
bleeding_v = 0.05 ;0.02 ;потеря крови при максимальной ране
wound_incarnation_v = 0.01 ;0.001 ;скорость заживания раны
morale_v = 0.01 ;скорость восстановления морали
health_hit_part = 1.0 ;0.8 ;процент хита, уходящий на отнимание здоровья
power_hit_part = 1.0 ;0.9 ;процент хита, уходящий на отнимание силы
psy_health_v = 0.1 ;скорость восстановления psy-здоровья

burn_immunity = 1.0 ;коэффициенты иммунитета
strike_immunity = 1.0
shock_immunity = 1.0
wound_immunity = 1.0
radiation_immunity = 0.0
telepatic_immunity = 1.0
chemical_burn_immunity = 1.0
explosion_immunity = 1.0
fire_wound_immunity = 1.0

sleep_health = 1.0 ;1.5 ;коэффициенты скоростей изменения параметров во время сна
sleep_power = 1.0 ;1.5
sleep_satiety = 1.0 ;0.8
sleep_radiation = 1.0 ;1.1
sleep_psy_health = 1.0

eat_freq = 5.0 ; ўрёЄюЄр єъєёют т ёхъ
eat_slice = 0.01 ; єтхышўхэшх ёvЄюёЄш яЁш 1 єъєёх
eat_slice_weight = 10.0 ; єьхэ№°хэшх хфv є ЄЁєяр

satiety_threshold = 0.5 ; below this value monster fill hunger


; Morale
Morale_Hit_Quant = 0.1
Morale_Attack_Success_Quant = 0.1
Morale_Take_Heart_Speed = 0.1
Morale_Despondent_Speed = 0.1
Morale_Stable_Speed = 0.05
Morale_Despondent_Threashold = 0.5

idle_sound_delay = 80000
eat_sound_delay = 4000
attack_sound_delay = 8000

sound_distant_idle = monsters\tushkano\tushkano_idle_
distant_idle_sound_delay = 80000
distant_idle_sound_range = 100.0

DamagedThreshold = 0.4
critical_wound_threshold = -1
critical_wound_decrease_quant = 0.

material = creatures\small
DynamicObjectsCount = 32

;species of monster
species = rat
spec_rank = normal
community = rat

[rats_terrain]
255,000,255,255 ;на всех уровнях, по графам без описания
255,004,255,255 ;на всех уровнях, по мертвой земле
255,005,255,255 ;на всех уровнях, по деревням
255,006,255,255 ;на всех уровнях, по городам
255,007,255,255 ;на всех уровнях, по промзастройкам
255,008,255,255 ;на всех уровнях, по туннелям
255,009,255,255 ;на всех уровнях, по подземельям
255,014,255,255 ;на всех уровнях, по железнодорожным насыпям
255,015,255,255 ;на всех уровнях, по искусственным заграждениям

[rat_resp]:m_rat_e
$spawn = "monsters\rat"
monster_type = indoor
rank = 0
visual = monsters\rat\rat_1
corpse_visual = monsters\rat\rat_1
spec_rank = weak
community = rat
icon = ui_npc_monster_dog
panic_threshold = 0.2
immunities_sect = rat_immunities

smart_terrain_choose_interval = 00:15:00
damage = m_resp_rat_damage

;inventory item information
cost = 0
inv_name = "dead rat"
inv_name_short = "rat"
inv_weight = 1.0 ;.5


inv_grid_width = 1
inv_grid_height = 1
inv_grid_x = 8
inv_grid_y = 13
inv_weight = 0.5
food_value = 10

; eatable item
eat_health = -0.1
eat_satiety = 0.2
eat_power = -0.05
eat_radiation = 0.01 ;0.03;
wounds_heal_perc = 0
eat_portions_num = -1



;===========================================================================
; IMMUNITIES
;===========================================================================
[rat_immunities]
burn_immunity = 1 ;коэффициенты иммунитета
strike_immunity = 1
shock_immunity = 1
wound_immunity = 0.5
radiation_immunity = 0.0
telepatic_immunity = 1.0
chemical_burn_immunity = 1
explosion_immunity = 1
fire_wound_immunity = 3

[m_resp_rat_attack_params]

;---------------------------------------------------------------------------------------------------------------------------------------------
; anim | time[0..1] | hit_power | impulse | impulse_dir (x,y,z) | Field of hit_test (left,right, bottom, top ) | Test Dist
;---------------------------------------------------------------------------------------------------------------------------------------------
stand_attack_0 = 0.25, 0.10, 20, 0.0, 1.0, 0.0, -1.2, 1.2, -1.6, 1.6, 1.0
stand_attack_1 = 0.25, 0.10, 30, 0.0, 1.0, 0.0, -1.2, 1.2, -1.6, 1.6, 1.0
stand_attack_2 = 0.25, 0.10, 35, 0.0, 1.0, 0.0, -1.2, 1.2, -1.6, 1.6, 1.0


[m_resp_rat_step_params]
;---------------------------------------------------------------------------
; anim | Cycles | time1 | power1 | time2 | power2 |
;---------------------------------------------------------------------------
stand_walk_fwd_0 = 1, 0.2, 0.5, 0.7, 1,
stand_run_0 = 1, 0.25, 1, 0.25, 1,


[m_resp_rat_damage]
;bone_name = ,-1,
; - коэфф. изменения хита (уменьшения здоровья)
; - коэфф. изменения величины открытой раны

default = 1, -1, 0.10 ;0.15, -1, 0.10

[rat_weak]:m_rat_e
$spawn = "monsters\rat"
monster_type = indoor
rank = 0
spec_rank = weak
community = rat
Tele_Time_To_Hold = 200


/spoiler]


1. Вы сейчас в интернете
2. Вы на сайте stalker-portal
3. Вы читаете
5. Вы не заметили, что отсутствует пункт 4
6. Вы это проверили
7. Вы улыбаетесь
8. Поставь себе в подпись и нас будет больше
Stalk15
    
Посты: 1023
Откуда: Как-бэ Новосибирск(Точно не знаю=))
Возраст: 30
20-08-2010 09:51 GMT3 час. #1321948   
erlik
Спасибо.

djslavikoz
Вроде надо в xr_statistic.script записать нового монстра.По анологии.Или посмотри, как, напимер, в солянке прописана кры**50016ea8aab1bb10eeba**дом находящихся НПС на врагов к ГГ
npc:set_relation(game_object.enemy, тут нужно что-то написать, но не знаю что)
end
end[/code]

Не подскажете?
-----------------------------------------------
erlik
Спасибо.Всетаки попробую, вдруг повезет:-)

отредактировал(а) Stalk15: 20-08-2010 10:28 GMT3 час.

Новые фишки для сталкера(см. журнал)
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
20-08-2010 10:23 GMT3 час. #1321964   
djslavikoz
Не существует такого классового идентификатора как rat_s. Потому игра и ругается на таблицу monster_classes.
Посмотри внимательно в lua_help class clsid, где перечислены все существующие константы - откуда ты взял эту строчку?
Крысу вроде как делают на классе тушкана. И еще (насколько я помню - может и не совсем прав)- без обработки ее модели в 3D редакторах (и SDK) она спавнится то ли неживой, то ли еще как то криво.
-------------------------------------------------------------
PS: не заметил - она у тебя и так на классе тушкана сделана. Значит просто лишняя строчка
rat_s в таблице.
Stalk15
К кому меняешь отношение - того и пиши. db.actor например.
Хотя у меня есть подозрение, что у тебя ничего не выйдет. Я то ж самое как то давно пытался делать через цикл - и чего то не вышло.


Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
СидырыЧЪ
    
Посты: 208
Откуда:
Возраст: 30
20-08-2010 10:36 GMT3 час. #1321973   
djslavikoz
а может проблемма в xr_statistic хотя там у тебя все прописано а еще может дело в самом скрипте хотя я сомневаюсь


Horrible area mod Видео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
Darien Fx
    
Посты: 1372
Откуда:
Возраст: 30
20-08-2010 11:00 GMT3 час. #1321988   
Stalk15
**50016ea8aab1bb10eeba**


СидырыЧЪ
    
Посты: 208
Откуда:
Возраст: 30
20-08-2010 12:01 GMT3 час. #1322045   
народ кто нибудь мне может помоч : я хочу заспаунить через скрипт контролера на кордоне и не получается . Пожалуйста кто нибудь напиши те полностью функцию из спауна


Horrible area mod Видео в журнале
--------------------------------------------------------------------
Важнейшая задача цивилизации - научить человека мыслить
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 14:30 GMT3 час. #1322187   
Произвёл модернизацию кода определения предметов на поясе. Улучшения:
1. -- величина кода уменьшилась в два раза!!! (за счёт избавления от некоторых ключей)
2. -- произведён раздел действий (спавн разделителя/-> итерация/-> удаление разделителя) на разные циклы апдейта, за счёт**50016ea8aab1bb10eeba**e end
end

return false
end

--функция отключения итерации при открытии инвентаря
--(привязана к колбэку info_callback() в файле bind_stalker.script)
function InventoryInfo(info)
if info == "ui_inventory" then
open_inventory = true
this.DeleteSeparator()
elseif info == "ui_inventory_hide" then
open_inventory = false
end
end

--функция сброса итерации, при взятии/выбрасывании предметов инвентаря
--(привязана к колбэкам on_item_take() и on_item_drop () в файле bind_stalker.script)
function TakeAndDrop(item)
if item:section() == "separator" or not separator then return end

if not open_inventory then
this.DeleteSeparator()
end
end[/code]


Код будет добавлен в журнал и F.A.Q.

отредактировал(а) singapur22: 20-08-2010 15:18 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
blackraven6
    
Посты: 624
Откуда: СПб
Возраст: 32
20-08-2010 14:43 GMT3 час. #1322205   
singapur22 Отлично! Как всегда.

добавлено спустя 58 секунд

СидырыЧЪ господи вот только не говори что на сталкер вики нет ни одного описания спавна!?

отредактировал(а) blackraven6: 20-08-2010 14:44 GMT3 час.


Журнал
- модель M79
- модель HK SL-8
- модель Milkor m32 WIP
erlik
    
Посты: 2338
Откуда: Набережные Челны
Возраст: 47
20-08-2010 14:46 GMT3 час. #1322208   
singapur22
The function is Good :-cool)
--------------------------------
Так значит по твоим словам делить код на более мелкие куски (в виде отдельных функций на одно-два действия) имеет смысл не только ради большей читабельности кода, но и в плане производительности?
Я просто никогда не любил писать огромные блоки (кстати в АМК этим особенно злоупотребляли составляя блоки function ...end по 300-500 строк ) и поэтому всегда (чисто ради собственного удобства) старался их как то поделить на более мелкие составляющие.

------------------------------------------------------------------------------------------------------------
singapur22
Ну как бы там ни было неоптимально изначально, автору кода можно это простить - все таки это единственный существующий рабочий вариант данной проверки, идея которого пришла в голову только одному человеку. За что ему и спасибо. А доработка кода - уже задача тех, кто его использует.:-)

отредактировал(а) erlik: 20-08-2010 15:35 GMT3 час.

Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 15:17 GMT3 час. #1322250   
erlik Это естественно. Многие действия выполняются в нескольких местах кода (как например удаление в данном коде), и естественно имеет смысл вывести его во внешнюю функцию, дабы не прописывать одно и тоже по нескольку раз. В предложеном тобой коде так же была тупая дубликация одной из функций. Где первая вызывалась из take, а вторая из дропа. Единственное что их различало, это сообщение выводимое в консоль. Не забываем, что величина кода так же влияет на производительность.

отредактировал(а) singapur22: 20-08-2010 15:38 GMT3 час.

Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
АнархОПанк
    
Посты: 998
Откуда:
Возраст:
20-08-2010 15:55 GMT3 час. #1322314   
Кто нибудь может объяснить что за фигня творится?! (Я даже переустановил игру вылетает все равно!)

Имеем SHOC 1.0004, имею свой мод. Вдруг не с того не с сего у меня стала игра вылетать на синхронизации с подобными вылетами:

Expression : fatal error
Function : weapon_hud_value::load
File : E:\stalker\patch_1_0004\xr_3da\xrGame\WeaponHUD.cpp
Line : 34
Description :
Arguments : There is no 'wpn_knife_0' bone for weapon 'wpn_knife_hud'.


(До этого у меня стоял реаниматион прожект)

И что я только не делал. Удалил OGF модели - вылет. Удалил конфиг - вылет. Удалил и то и другое - вылет. И так любой вариант! :obstenu:
Может кто знает где таится неизведанный мне худ?!?!? То есть ОТКУДА ЖЕ СЧИТЫВАЕТСЯ ЭТОТ ДОЛБАННЫЙ ХУД ДАЖЕ КОГДА НЕТ КОНФИГОВ И ОГФ МОДЕЛЕЙ!?


singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 16:11 GMT3 час. #1322332   
АнархОПанк Смотря какой конфиг удаляешь. Не нужно забывать, что все новые модели оружия и предметов, создаются на основе уже имеющихся классов. Вполне возможно (даже скорее всего), был добавлен новый итем, который был привязан к классу ножа. Но при этом не все настройки в конфигах были указаны. Не нужно также забывать, что модель итема должна при этом содержать все нужные кости, которые требует класс.


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Artos
    
Посты: 4176
Откуда:
Возраст: 66
20-08-2010 16:14 GMT3 час. #1322333   
erlik
(Всем привет! Был в отлучке ...)
Рабочий вариант проверки предмета на поясе существует не в единственном варианте. Уже давно мною исходный код был причесан и модернизирован ... (см. m_belt.script в Симбионе).

singapur22
Помимо открытяи инвентори актора следует внести проверки на открытие окон обыскиваемых трупов/ящиков/... ("ui_car_body"). Да и есть нюанс с открытием окна торговли ("ui_trade").
По оптимизации: ИМХО, относительный недостаток и этого и 'моего' вариантов кодов в том, что каждый раз спавнится/удаляется сепаратор, хотя собственно требуется всего лишь определить 'границу между слотами и рюкзаком', для чего требуется 'зафиксировать' некий последний предмет, попавший на пояс. Начал как то писать вариант перемещения предмета-сепаратора из фейк-хранилища на пояс актору и обратно, но ... недоделал. Т.к. спавн и удаление объекта значительно больше тратят ресурсов игры, чем перемещение - домодернизация имеет смысл ...

(о хите по инвентори-боксу)
Пока не сделал рабочий вариант. И времени не было и долелать кое что по своей сборке сейчас требуется ... Но изыскания не заброшены.

АнархОПанк
Дополню ответ singapur22: При считывании конфигов важен порядок(!) их считывания. Если у тебя добавлен некий предмет, для которого используется худ родительского предмета, то чтение конфига этого предмета должно быть НЕ ранее чтения конфига родительского предмета.

отредактировал(а) Artos: 20-08-2010 16:33 GMT3 час.

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 16:18 GMT3 час. #1322339   
Artos

Помимо открытяи инвентори актора следует внести проверки на открытие окон обыскиваемых трупов/чщиков/... ("ui_car_body"). Да и есть y.fyc с открытием окна торговли ("ui_trade").


Логично. Я както это упустил. Лады, ща допишем. :-)


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
АнархОПанк
    
Посты: 998
Откуда:
Возраст:
20-08-2010 16:27 GMT3 час. #1322348   
singapur22 , Artos спасибо. Буду смотреть, искать....
Просто вылет произлшел после того как пытался добавить ружье БМ-16 (Full) и началось.... Удалив все конфиги и ОГФ модели, вылеты прекратились. Решил заменить реаниматион прожект на Арсенал Мод - вылеты начались вновь..
Что ж, спасибо за подсказки!
Будет есть на что опираться.


Чувак на болоте
    
Посты: 87
Откуда: Волгодонск
Возраст:
20-08-2010 16:28 GMT3 час. #1322349   
люди скачал билдовский корднон для ТЧ а там вместе текстурес лтх без них работает но все текстуры ужас а с ним игра не запускается че делать подскажите


Artos
    
Посты: 4176
Откуда:
Возраст: 66
20-08-2010 16:31 GMT3 час. #1322352   
singapur22
Есть еще идея по поясу: А зачем вообще спавнить/удалять/перемещать сепаратор?! Ведь он может быть всегда у актора. Для определения границы 'пояс-рюкзак' с его помощью, вполне достаточно чтобы он был 'положен на пояс' последним.
Имею ввиду вот что: Если перед циклом итерации по инвентори актора предварительно дропить сепаратор и возвращать назад -> и границу/индекс можно определять и возни со (ре)спавнами не будет. Останется только внести сепаратор в различные схемы/алгоритмы, которые могут быть к нему критичны.
Останется один недостаток, который и в исходном алгоритме определения пояса присутствует: Полезный объем пояса (кол-во ячее) на одну меньше чем имеется. А это значит: алгоритм НЕ работает при полной загрузке пояса реальными предметами.


"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..." ©Машина времени
АнархОПанк
    
Посты: 998
Откуда:
Возраст:
20-08-2010 16:32 GMT3 час. #1322353   
Чувак на болоте ты можешь объяснить подробнее че ты написал?

PS ДАй ссылку на этот кордон.
PSS Это случайно не из 1935 билда, предназначенная для теста/просмотра оной локации. Если да то не нужно ссылку, если нет, то будь добр дай:-)?


Чувак на болоте
    
Посты: 87
Откуда: Волгодонск
Возраст:
20-08-2010 16:39 GMT3 час. #1322364   
Короче скачал порт билдосвкого кордона для финалки. Там все текстуры террейна размыты. Чтобы они появились из надо было прописать в textures.ltx там был готовый файл скачал игра после логотипа стаклер тени чернобыля вылетает. я хз чеделать

АнархОПанк ща ссыль ббудет


singapur22
    
Посты: 2089
Откуда: Рубцовск
Возраст: 45
20-08-2010 16:47 GMT3 час. #1322380   
Artos

предварительно дропить сепаратор и возвращать назад
Это очень даже интересно. Логично мыслишь. Надо попробывать.


Останется один недостаток, который и в исходном алгоритме определения пояса присутствует: Полезный объем пояса (кол-во ячее) на одну меньше чем имеется. А это значит: алгоритм НЕ работает при полной загрузке пояса реальными предметами.


А тут я не понял, что ты имеешь ввиду. Ведь сепаратор спавнится в рюкзак, а не на пояс. А в рюкзаке места предостаточно. :-)


Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.


Форумы Архив » Свалка Вопросы и ответы (ТЧ по 11.09.10)


Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для
просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.

Использование материалов сайта возможно с разрешения администрации. Все права защищены. © 2004–2025 «Stalker-Portal.ru»