Вы задаёте интересующий вас вопрос и тот, кто может вам на него ответить, пишет свой ответ. Правила темы:
1. Прежде чем задать вопрос, желательно прочитать все предыдущие страницы темы. Даже если вы не найдете там нужного ответа - я уверен, вы узнаете много нового. Второй вариант - воспользоваться поиском по ключевому слову.
2. Вы можете задавать вопросы, только непосредственно касающиеся создания модификаций и редактирования файлов игры
3. Личные вопросы не допускаются
4. Отвечать на вопросы желательно достаточно развернуто, задевая все аспекты касающиеся конкретного вопроса
5. Отвечать вы можете только в том случае если уверены в правильности ответа, если не знаете - просто не отвечайте. Авторы неправильных, вводящих в заблуждение ответов будут наказываться.
6.Соблюдайте грамотность и правильность построения вопросов и ответов, во избежание их удаления. "Спасибо / пожалуйста / не знаю" и прочие односложные и не несущие смысловой нагрузки сообщения, будут удаляться немедленно, а их авторы - наказываться.
Основная цель темы - помочь новичкам-модостроителям, второстепенная - свести на нет тенденцию создания новых тем по каждому интересующему новичков вопросу.
Добрый день (утро,вечер,ночь). Такая проблема.Играю в Лост Альфу и очень хочу что бы мой ГГ бегал с большим количеством груза.Как изменить я в курсе проблема в другом. Геймдата зачем-то разбита на части в файлы формата db.Чем их распаковать нашёл.Но с изменёнными файлами игра работает только если начать новую игру.Сейвы не грузятся)) Думал проблема в том что имеется конфликт между изменёнными распакованными файлами и упаковкой db .Ели нашёл упаковщик.Но увы с изменённым и упакованным файлом игра вообще не запускается.((((( Как мне заставить игру загружать сейв с изменённым файлом???????????????????????? Новую начинать не вариант) Спасибо за внимание.
Как мне заставить игру загружать сейв с изменённым файлом???????????????????????? Новую начинать не вариант)
Проблему решил сам) Так всё просто оказалось.Просто не надо весь архив из db0 оставлять в папке геймдата,а только те фалы которые изменяешь.Ну и конечно нужно их разместить на том месте где они должны быть.К примеру файлик actor.ltx в папке (gamedata\config\creatures\actor.ltx) .Создавая нужные папки если их нет в геймдате.У меня к примеру не было creatures .Так что у меня теперь 130 кг в рюкзаке и ношусь по зоне с ветерком)Надо теперь артефактами заняться ,а то они какие-то унылые)Эх разбаловала Солянка) разбаловала...
Добавлено (28.02.2015, 10:00) --------------------------------------------- Такой вопрос.Как изменить бинокль что бы он подсвечивал всех и неписей и мутантов.А то ЛА это по моему первый мод где такой функции у бинокля нет.
Сообщение отредактировал Вова_Рус - Пятница, 27.02.2015, 22:50
[sections] ;--/ 01 = basic_modules ;--/ НЕ Отключать! 02 = game_modules ;--/ НЕ Отключать! 03 = main_modules ;--/ НЕ Отключать! 04 = ai_modules 05 = user_modules ;==================================================================== ;--/ комментарии по модулям ;--/[0] - критически важный базовый модуль! НЕ УДАЛЯТЬ и НЕ ОТКЛЮЧАТЬ! ;--/[1] - критически важный в локальных ситуациях (квесты, эпизоды, ...). НЕ желательно отключать. ;--/[2] - опциональный(необязательный) для старта игры, но НЕ удалять если был включен. ;--/[3] - опциональный(необязательный) для игры, исключающий отдельные функции/фишки во всей игре. ;--/[4] - опциональный(необязательный) для игры, исключающий отдельные функции/фишки в отдельных эпизодах. ;--/[-] - зависящий от родительского. Отдельно НЕ отключать, отключается только вместе с родительским! ;--/[?] - информация по возможности отключения которого уточняется. ;--/[x] - модуль, находящийся в разработке (т.е. зарезервирован) ;--/ управление: true|false -> в(от)ключить
[basic_modules] ;--/ основные базовые модули 01 = m_hlp , true ;--/[0] Helpers-функции (HE отключать!) 02 = m_timers , true ;--/[0] Таймерные функции (HE отключать!) 03 = m_slave , true ;--/[0] Основные mod-функции (HE отключать!) 04 = m_lvchg , true ;--/[1] Control Level Changers 05 = m_relogic , true ;--/[1] Change old logic ;==================================================================== [game_modules] ;--/ модули оригинальной игры 01 = se_stor , true ;--/[0] The general storehouse (HE отключать!) ... 09 = game_stats , true ;--/[0] "Статистика игры" ;==================================================================== [main_modules] ;--/ модули собственно мода 00 = m_netpk , true ;--/[1] Net-packet'ы 01 = m_patrols , true ;--/[1] Менеджер путей/точек ... 39 = m_effects , true ;--/[3]Эффекты от критического ранения ГГ 40 = m_particles , true ;--/[3]Доп.менеджер партиклов и т.д
m_effects.ltx
;--/ для модуля "Визуальные эффекты" (m_effects.script) [options] ;--/ debug = false ;--/ (false|true) (от|в)ключен режим отладки и вывод в лог доп.собщений radiation = true ;--/ (false|true) (от|в)ключен режим постэффектов радиации gg_kick = true ;--/ (false|true) (от|в)ключен режим "шальная пуля" от АМК blood = true ;--/ (false|true) (от|в)ключен режим "кровавые" эффекты от попадания в ГГ blood_wpn = true ;--/ (false|true) (от|в)ключен "кровавый/взрывной" эффект для некоторых типов оружия
[explosive_weapon] ;--/ 'разрывное' оружие wpn_sgauss = true
local tKeepItems = {} --/ список предметов, которые нельзя удалять (квестовые например) local tWeaponBloody = {} --/ 'кровавое' оружие local tWeaponFlame = {} --/ 'огнемет'ы local tWeaponExplosive = {} --/ 'разрывное' оружие local tBloodyClsids = {} --/ классы 'кровавого' оружия local tNoDrop = {} --/ не выбрасываемые предметы/оружие local iRadPP = nil local iWndPP = nil local iWndPP2 = nil local oSndWnd,oSndWnd2 = nil,nil
local iTimeUpdate = 0 local i,k,v,o --/ ----------------------------------------------------------------- --/ Initialize Module (инициализация, выполняется единожды) --/ ----------------------------------------------------------------- function init() -- printf("init:[%s]", ">") --/#~# event("presets"):register(PreSets) bInit = true end --/ ----------------------------------------------------------------------------------------------- --/ Process (функции) --/ ----------------------------------------------------------------------------------------------- function PreSets(e) -- printf("PreSets:[%s]", ">") --/#~# if not bInit then abort(sModule..":Not_initialised!") end tKeepItems = Get_IniSection("misc\\death_generic.ltx", "keep_items", "true") --/ список предметов, которые нельзя удалять local ltx = ini_file("mods\\"..sModule..".ltx") bDebug = ReadFromIni(ltx, "options", "debug", bDebug, "bool") --/ debug-mode bKickActor = ReadFromIni(ltx, "options", "gg_kick", bKickActor, "bool") --/ "шальная пуля" для ГГ (АМК) bRadPPEnabled = ReadFromIni(ltx, "options", "radiation", bRadPPEnabled, "bool") --/ эффекты от радиации bBloodPPEnabled = ReadFromIni(ltx, "options", "blood", bBloodPPEnabled, "bool") --/ кровавые эффекты от пападания в ГГ bWpnBloody = ReadFromIni(ltx, "options", "blood_wpn", bWpnBloody, "bool") --/ "кровавый/взрывной" эффект для некоторых типов оружия tNoDrop = Get_IniSection(ltx, "no_drop", "true") tWeaponBloody = Get_IniSection(ltx, "bloody_weapon", "true") --/ 'кровавое' оружие tWeaponFlame = Get_IniSection(ltx, "flame_weapon", "true") --/ 'огнемет'ы tWeaponExplosive = Get_IniSection(ltx, "explosive_weapon", "true") --/ 'разрывное' оружие local tCls = Get_IniSection(ltx, "bloody_clsids", "true") --/ классы 'кровавого' оружия for k,v in pairs(tCls) do if v and clsid[k] then tBloodyClsids[clsid[k]] = true end end oSndWnd = xr_sound.get_safe_sound_object("actor\\pain_3") oSndWnd2 = xr_sound.get_safe_sound_object("heart\\2") ReInit_Options() iTimeUpdate = time_global() + 8000 event("options"):register(ReInit_Options) event("npc_hit"):register(OnHit) event("mob_hit"):register(OnHit) event("npc_death"):register(OnDeath) event("mob_death"):register(OnDeath) event("actor_death"):register(OnActorDeath) if bRadPPEnabled or bBloodPPEnabled or bKickActor then timer_1s():register(OnTimer_1s) event("actor_hit"):register(OnActorHit) end end
function ReInit_Options(e) --/ режим 'испарения' тел/оружия при 'взрыве' local iOpt = GetVarA("opt_vpr", 0) bVprCrp = iOpt >= 1 --/ откл/вкл - режим "испарения" тел bVprWpn = iOpt == 2 --/ откл/вкл - режим "испарения" оружия end
function OnActorDeath(e) timer_1s():unregister(OnTimer_1s) event("actor_hit"):unregister(OnActorHit) end
function OnTimer_1s(t,uo) if bRadPPEnabled then Actor_Radiation_PP() end --if bKickActor then --Actor_Wounded_PP() --elseif bBloodPPEnabled then --Actor_Wounded_PP2() --end end
function OnActorHit(e) --/oWho,iAmount Actor_Wounded_PP(e) end --/------------------------------------------------------------------ --/ Эффекты от радиации --/------------------------------------------------------------------ function Actor_Radiation_PP() local iRadiation = db.actor.radiation --/ уровень радиации у ГГ if not iRadPP and iRadiation >= 0.3 then iRadPP = random_u16() level.add_pp_effector("alcohol.ppe", iRadPP, true) elseif iRadPP and iRadiation <= 0.01 then level.remove_pp_effector(iRadPP) iRadPP = nil end end --/------------------------------------------------------------------ --/ Эффекты от критического ранения ГГ --/------------------------------------------------------------------ function Actor_Wounded_PP(e) if e.amount > 0.05 then local oActor = db.actor if oActor then -- log("%s:Actor_Wounded_PP:Health=[%s],Who=[%s]:[%s]", sModule, ShortStr(e.amount), e.who and e.who:name(), ">") --/#~# if not iWndPP then iWndPP = random_u16() level.add_pp_effector("shoot.ppe", iWndPP, false) else level.set_pp_effector_factor(iWndPP,(e.amount)*100) end if e.amount > 0.3 then --/ сильно подранили level.add_cam_effector("camera_effects\\fusker.anm", random_u16(), false, "") oSndWnd:play_no_feedback(oActor, sound_object.s2d, 0, vector(), 1.0) if math.random() < e.amount^2 then Drop_ActiveItem() --/ "потеря" активного предмета end end end end end
--/ "потеря" активного предмета function Drop_ActiveItem() local oItem = db.actor:active_item() if oItem and not tNoDrop[oItem:section()] then db.actor:drop_item(oItem) end end
function Actor_Wounded_PP2() local oActor = db.actor if oActor and oActor.health <= 0.2 then log("%s:Actor_Wounded_PP2:Health=[%s]:[%s]", sModule, oActor.health, ">") --/#~# if not iWndPP2 then iWndPP = random_u16() --level.add_pp_effector("red_fade_out.ppe", 1999, true) level.add_pp_effector("bloody.ppe", iWndPP2, true) level.set_pp_effector_factor(iWndPP, 5.0) if not oSndWnd:playing() then oSndWnd:play_at_pos(oActor, oActor:position(), 1, sound_object.looped) end elseif oSndWnd:playing() then oSndWnd:set_position(oActor:position()) if math.random() <= 0.1 then Drop_ActiveItem() --/ "потеря" активного предмета end end elseif iWndPP2 then level.remove_pp_effector(iWndPP) iWndPP2 = nil if oSndWnd:playing() then oSndWnd:stop() end end end
--/------------------------------------------------------------------ --/ Hit to NPC or Mob --/------------------------------------------------------------------ function OnHit(e) if e.victim and e.amount >= 0.1 and e.who and IsStalker(e.who) and (tonumber(e.bone) or 0) > 0 then OnHit_Firebated(e.victim, e.who) --/ проверка хита из 'огнеметов' end end
--/------------------------------------------------------------------ --/ Check NPC or Mob Dead (гибель непися или монстра) --/------------------------------------------------------------------ function OnDeath(e) -- printf("OnDeath_NPC:Victim=[%s],Who=[%s]:[%s]", e.victim and e.victim:name(), e.who and e.who:name(), ">") --/#~# if e.victim and e.who then if e.victim:section() == "zombie_blow" then --/ убит 'взрывной' зомби, у него свои партиклы и звуки this.OnDeath_ZombyBlow(e.victim, e.who) elseif IsStalker(e.who) then local iTypeWpn = Get_Type_Weapon(e.who) if iTypeWpn == 2 then this.OnDeath_Firebated(e.victim, e.who) elseif bWpnBloody and iTypeWpn > 0 then this.OnDeath_PP(e.victim, e.who, iTypeWpn == 3) end end end end
--/------------------------------------------------------------------ --/ проверка типа оружия: 'кровавое', 'огнемет' или 'разрывное' --/------------------------------------------------------------------ function Get_Type_Weapon(oNPC) local oItem = oNPC:active_item() local iClassId = oItem and oItem:clsid() if iClassId and isWeapon(oItem,iClassId) then local sSection = oItem:section() if tWeaponExplosive[sSection] then -- log("%s:Get_Type_Weapon:Wpn=[%s],cid=[%s]~explosive:[%s]", sModule, sSection, iClassId, "i" ) --/#~# return 3 --/> 'разрывное' elseif tWeaponFlame[sSection] then -- log("%s:Get_Type_Weapon:Wpn=[%s],cid=[%s]~flame:[%s]", sModule, sSection, iClassId, "i" ) --/#~# return 2 --/> 'огнемет' elseif tBloodyClsids[iClassId] then -- log("%s:Get_Type_Weapon:Wpn=[%s],cid=[%s]~blood:[%s]", sModule, sSection, iClassId, "i" ) --/#~# return 1 --/> 'кровавое' else for k,v in pairs(tWeaponBloody) do if sSection:match(k) then return 1 --/> 'кровавое' end end end end return 0 --/> end
--/------------------------------------------------------------------ --/ "кровавые" эффекты (для некоторых типов оружия), victim=killed | who=killer --/------------------------------------------------------------------ function OnDeath_PP(oVictim, oWho, bExplosive) -- log("%s:OnDeath_PP:Victim=[%s],Who=[%s],VprAmmo=[%s],VprCrp=[%s],flg=[%s]:[%s]", sModule, oVictim:name(), oWho:name(), db.bVprAmmo, bVprCrp, bExplosive, "i" ) --/#~# local bHuman = IsHuman(oVictim) local sParticles = "hit_fx\\hit_flesh_headshot" --/hit_big_particles local sSound = nil local sBone = "bip01_spine" if bExplosive and db.bVprAmmo and oWho:id() == idActor then --/ оружие и патрон 'разрывные' sParticles = "amk\\zomb_explode" sSound = "anomaly\\anomaly_body_tear_1" --/body_tearing_sound if bHuman and math.random() < 0.5 then sParticles = "anomaly2\\body_tear_0"..(math.random(1,2)-1) end this.Get_BlowHit(db.actor,oVictim) --/ даем хит от взрыва if bVprCrp and oVictim:story_id() == 4294967296 and not get_object_story_id(oVictim:id()) then --/ разрешено 'испарять' трупы if IsStalker(oVictim) then if not IsQuestNPC(oVictim) then --/ не квестовый НПС local tRecipes = GetVar("amk_body_recipe",{}) if not tRecipes[oVictim:id()] then --/ в трупе нет рецепта this.Add_Disappearing(oVictim) --/ добавляем в таблицу "испаряемых" трупов end end else --/ монстров удаляем без доп.условий this.Add_Disappearing(oVictim) --/ добавляем в таблицу "испаряемых" трупов end end end if db.m_particles then local tParticles = { particle = sParticles, sound = sSound, --bone = sBone, pos = oVictim:bone_position(sBone) } m_particles.add_object(oVictim,tParticles) else --/ from particle_flame.script if bHuman then local aParticlesParams = particle_params(vector():set(0,0,0.3), vector():set(0,0,0), vector():set(1,0,0)) action(oVictim, particle(sParticles, sBone, aParticlesParams, false), cond(cond.time_end,3000)) else local vPosObj = oVictim:position() local vPos = vector():set(vPosObj.x, vPosObj.y+0.5, vPosObj.z) local oParticles = particles_object(sParticles) oParticles:play_at_pos(vPos) end if sSound then local oSnd = xr_sound.get_safe_sound_object(sSound) if oSnd and not Snd:playing() then oSnd:play_no_feedback(oVictim, sound_object.s2d, 0, oVictim:position(), (bHuman and 2.0) or 1.0) end end end end --/------------------------------------------------------------------ --/ Хит из огнемета --/------------------------------------------------------------------ function OnHit_Firebated(oNPC, oWho) local oWeapon = oWho and oWho:active_item() if oWeapon and tWeaponFlame[oWeapon:section()] then if db.m_particles then local tParticles = { particle = "amk\\flame", bone = "bip01_spine" --stop_on_death = true } m_particles.add_object(oNPC, tParticles) end if oNPC.health < 0.15 and string.match(oNPC:section(),'zomb') then oNPC:kill(oNPC) end end end
function OnDeath_Firebated(oVictim, oWho) -- log("%s:OnDeath_ZombyBlow:Victim=[%s],Who=[%s]:[%s]", sModule, oVictim and oVictim:name(), oWho and oWho:name()), ">") --/#~# --/ даем партиклы 'дыма' if db.m_particles then local tParticles = { particle = "explosions\\explosion_fuelcan", sound = "weapons\\t_rgd5_explosion", pos = oVictim:bone_position("bip01_spine") } m_particles.add_object(oVictim, tParticles) end this.Add_Disappearing(oVictim) --/ труп 'исчезающий' --/ если актор рядом - дадим хит local oActor = db.actor if oActor:see(oVictim) then local iDist = distance_between(oActor,oVictim) if iDist < 10 then local h = hit() h.draftsman = oVictim h.direction = vector():sub(oActor:position(),oVictim:position()):normalize() --/vector():set(0,0,0) h:bone("bip01_spine") --/ чтобы учитывалась броня h.power = 1/iDist h.impulse = 25/iDist h.type = hit.explosion oActor:hit(h) h.power = 8/iDist h.type = hit.chemical_burn oActor:hit(h) end end end
function OnDeath_ZombyBlow(oVictim, oWho) if oVictim:section() == "zombie_blow" then -- log("%s:OnDeath_ZombyBlow:Victim=[%s],Who=[%s]:[%s]", sModule, oVictim and oVictim:name(), oWho and oWho:name(), ">") --/#~# --/ даем партиклы 'взрыва' if db.m_particles then local tParticles = { particle = "amk\\zomb_explode", sound = "anomaly\\anomaly_body_tear_1", pos = oVictim:bone_position("bip01_spine") } m_particles.add_object(oVictim, tParticles) end this.Add_Disappearing(oVictim) --/ труп 'исчезающий' --/ хит от 'взрыва' трупа this.Get_BlowHit(oWho,oVictim) --/ если убил не ГГ, но он рядом - дадим и ему хит if oWho:id() ~= idActor then this.Get_BlowHit(db.actor,oVictim) end end end
function Get_BlowHit(oVictim,oWho) local iDist = distance_between(oVictim,oWho) if iDist < 10 then local h = hit() h.draftsman = oWho h.direction = vector():sub(oVictim:position(),oWho:position()):normalize() --/vector():set(0,0,0) h:bone("bip01_spine") --/ чтобы учитывалась броня h.power = 1/iDist h.impulse = 25/iDist h.type = hit.explosion oVictim:hit(h) h.power = 10/iDist h.type = hit.chemical_burn oVictim:hit(h) -- log("%s:Get_BlowHit:Victim=[%s],Who=[%s],Dist=[%s]:[%s]", sModule, oVictim:name(), oWho:name(), ShortStr(iDist), "i") --/#~# end end
--/------------------------------------------------------------------------------------------------ --/ Удаление "испаряемых/исчезающих" трупов/оружия (режимы: vaporize & vanish) --/------------------------------------------------------------------------------------------------ --/ добавляем труп (id, время смерти) в id-массив "исчезающих" трупов function Add_Disappearing(oVictim) if not oVictim then return end --/> oVictim:kill(oVictim) local tStor = db.storage[oVictim:id()] if tStor then tStor.vanish = {timeout = 0.2} if IsStalker(oVictim) then --/ сталкер? tStor.vanish.timeout = 0.75 --/ delta-time for stalkers tStor.vanish.removed = true --/ флаг удаления тела if bVprWpn then --/ если разрешено 'испарение' оружия - добавляем испаряемое оружие local oActiveItem = oVictim:active_item() --/ активный предмет if oActiveItem then if isWpn(oActiveItem) and alife():object(oActiveItem:id()) then -- log("%s:Add_Disappearing:victim=[%s]~>wpn=[%s]:[%s]", sModule, oVictim:name(), oActiveItem:name(), "!") --/#~# tStor.vanish.wid = oActiveItem:id() soWpn.parent_id = 65535 --/ делаем оружие бесхозным end oVictim:drop_item(oActiveItem) --/#?# end end end --/ запуск таймера [time(sec),func,params] timer_xs():start(tStor.vanish.timeout,Remove_Vanish_Corpse,{id=oVictim:id(),cnt=0}) -- log("%s:Add_Disappearing:Obj=[%s/%s]:[%s]", sModule, oVictim:name(), oVictim:id(), oVictim:clsid(), "+") --/#~# end end
function Remove_Vanish_Corpse(t) local idCorpse,iCnt = t.id,t.cnt --/ Id трупа и счетчик попыток local tStor = idCorpse and db.storage[idCorpse] if tStor and tStor.vanish then if not iCnt or iCnt > 3 then --/ превышен предел числа попыток удалений tStor.vanish = nil printf("Remove_Vanish_Corpse:Clear:Cnt=[%s],Id=[%s]:<%s>", iCnt, idCorpse, "Warning!") --/#~# else local oCorpse = level.object_by_id(idCorpse) --/ game_object if oCorpse then local soCorpse = alife():object(idCorpse) --/ server_object -- printf("Remove_Vanish_Corpse:corpse=[%s]~>check_remove:[%s]", oCorpse and oCorpse:name(), ">") --/#~# if soCorpse then local tV = tStor.vanish --/ проверка разрешения ударения трупа сталкера if tV.removed ~= nil then if tV.removed == true then --/ проверка наличия в трупе рецепта local tRecipes = GetVar("amk_body_recipe",{}) if tRecipes[idCorpse] then --/ в трупе рецепт tV.removed = false --/<!> ставим флаг НЕудаления if db.is_dbg1 then log("%s:Remove_Vanish_Corpse:=[%s]<~recipe:<%s>", sModule, oCorpse:name(), "!") end --/#~# else --/ проверка наличия в трупе НЕудаляемых (квестовых) предметов oCorpse:iterate_inventory( function (dummy, oItem) if tKeepItems[oItem:section()] or IsSobjObj(oItem) then --/ предмет в списке НЕудаляемых или сюжетный tV.removed = false --/<!> ставим флаг НЕудаления if db.is_dbg1 and IsSobjObj(oItem) then log("%s:Remove_Vanish_Corpse:=[%s]<~Quest_Item=[%s/%s]:<%s>", sModule, oCorpse:name(), oItem:section(), oItem:story_id(), "!") end --/#~# return --/> end end ,oCorpse) end end if not tV.removed then tStor.vanish = nil return true --/> end end -- log("%s:Remove_Vanish_Corpse:=[%s],id=[%s]:[%s]", oCorpse:name(), sModule, idCorpse, ">>") --/#~# this.Get_Skeleton(oCorpse) --/ спавн скелета if bVprWpn and tV.wid then --/ есть оружие --/ запуск таймера удаления оружия [time(sec),func,params] timer_xs():start(0.1,Remove_Vanish_Weapon,{id=tV.wid, cnt=0}) log("%s:Remove_Vanish_Corpse:=[%s],Id=[%s],vpr_w=[%s],wid=[%s]:[%s]", sModule, oCorpse:name(), idCorpse, bVprWpn, tV.wid, "XoX") --/#~# end log("%s:Remove_Vanish_Corpse:=[%s/%s]:[%s]", sModule, soCorpse:name(), idCorpse, "X!X") --/#~# SwitchToOffLine(idCorpse) --/#!# переводим online->offline --Del_MapSpot(idCorpse, "deadbody_mini_spot") --/ #?# level.remove_calls_for_object(oCorpse) --/#?#oCorpse|soCorpse|idCorpse db.del_obj(oCorpse) soCorpse:visible_for_map(false) --/ скрываем метку alife():release(soCorpse, true) else --/ нет/не тот объект обработки - повтор (перезапуск таймера) t:reset(0.25,{id=idCorpse,cnt=iCnt+1}) log("%s:Remove_Vanish_Corpse:ReStart:Id=[%s],Not_Sobj=[%s/%s]:<%s>", sModule, idCorpse, oCorpse and oCorpse:name(), soCorpse and soCorpse:name(), "Warning!") --/#~# end end end end end
function Remove_Vanish_Weapon(t) local idItem,iCnt = t.id, t.cnt --/ Id и счетчик попыток удаления предмета/оружия -- log("%s:Remove_Vanish_Weapon:Id=[%s],Cnt=[%s]:[%s]", sModule, idItem, iCnt, ">") --/#~# if idItem and iCnt and iCnt < 3 then local oItem = level.object_by_id(idItem) --/ game_object local soItem = alife():object(idItem) if oItem and soItem then if not oItem:parent() and soItem.parent_id == 65535 then --/ ствол бесхозный -- log("%s:Remove_Vanish_Weapon:id=[%s],name=[%s],p_id=[%s],cnt=[%s]:[%s]", sModule, idItem, soItem:name(), soItem.parent_id, iCnt, "XwX" ) --/#~# alife():release(soItem, true) --/ удаляем ствол из игры else log("%s:Remove_Vanish_Weapon:ReStart:Cnt=[%s],Wpn=[%s],Id=[%s],Pid=[%s]:[%s]", sModule, iCnt, soItem:name(), idItem, soItem.parent_id, "<+" ) --/#~# soItem.parent_id = 65535 --/ делаем оружие бесхозным --/ перезапуск таймера удаления оружия t:reset(0.2,{id=idItem,cnt=iCnt+1}) end end end end
function Get_Skeleton(oNPC) if oNPC then local soSkelet = Spawn_Obj("breakable_object", oNPC:bone_position("bip01_spine"), oNPC:level_vertex_id(), oNPC:game_vertex_id()) local pk = get_netpk(soSkelet,1) --/ запрос нет-пакета ('state') if pk:isOk() then --/ получен доступ к нет-пакету объекта? local data = pk:get() --/ читаем данные из нет-пакета --/TODO: доработать!!! local bHuman = IsHuman(oNPC) or string.match(oNPC:section(),'zomb') local sVisual = "crash_monster" if db.iSSVer >= 8 then --/ for STCS/SCOP if bHuman then --/ сталкер sVisual = "crash" end data.visual_name = "dynamics\\dead_body\\skelet_"..sVisual else --/ for SHOC if bHuman then --/ сталкер local tSkeletons = { "combine_pose_03", "combine_pose_04", "combine_pose_05", "torso" } sVisual = tSkeletons[math.random(#tSkeletons)] end data.visual_name = "physics\\dead_body\\skelet_"..sVisual end pk:set(data) --/< запись в нет-пакет level.client_spawn_manager():add(soSkelet.id, 65535, Callback_For_Skeleton, "skelet") end end end
function Callback_For_Skeleton(uo,idObj,oObj) --/ 'опускаем' скелет на землю небольшим хитом (on_the_ground) if oObj then -- log("%s:Callback_For_Skeleton:=[%s/%s]<~hit_on_the_ground:[%s]", sModule, oObj:name(), idObj, ">") --/#~# local h = hit() h.draftsman = oObj h.direction = vector():set(0,-1,0) h.power = 0.001 h.impulse = 1 h.type = hit.strike oObj:hit(h) end end
Теперь, как из этого ВСЕГО, если этого достаточно, собрать реально работающие разрывные патроны для чистой игры (чтобы можно было легко адаптировать к модам)? HELP!
ЦитатаВова_Рус ()
бинокль
В LA не играл (играю в OGSE 0.6.9.3), но возможно там есть в продаже улучшенный бинокль? Если нет, надо будет глядеть конфиги/скрипты других модов с работающей, нужной тебе функцией.
Сообщение отредактировал uzznick - Суббота, 28.02.2015, 14:58
Привет всем! Эфект разрыва тел уже есть в наличии *** , но опять, надо будет править и партиклы Метки в бинокле зашиты в xrGame.dll это точно [IMAGINE]Ссылка удалена согласно п.VI.17 ПФ! Строгое предупреждение с занесением в личное дело![/IMAGINE]
Теперь, как из этого ВСЕГО, если этого достаточно, собрать реально работающие разрывные патроны для чистой игры
Вы опять пишите ... как бы это помягче сказать. Нет никаких разрывных патронов. Даже из того, что вы здесь выложили видно, что после получения хита вызывается функция, которая всю эту красоту и воспроизводит. Тут прописывается звук и партиклы, которые нужно отыграть при попадании пули. Даже не пули, а именно проводится проверка на оружие, которое в руках ГГ. То есть сделано именно то, о чём я и писАл ранее. Просто всё это написано так, что .... лучше не читать. Выковыривать это ( тем более из скриптов Артоса, которые академичны и плохо читаемые для простых скриптёров ) нет никакого желания. Напишите прямо Артосу ( сайт ... из трёх букв ) может он и захочет это для вас сделать.
В LA не играл (играю в OGSE 0.6.9.3), но возможно там есть в продаже улучшенный бинокль? Если нет, надо будет глядеть конфиги/скрипты других модов с работающей, нужной тебе функцией.
В продаже точно нет.Я пробовал по простому из другого мода файл бинокля перекинуть) игра не хочет запускаться. А что именно в параметра отвечает за функцию подсветки я и не знаю.
Насколько я помню это "зашито" в файле xrGame.dll (папка bin ) в Солянке и других модах на ТЧ . Пойдет ли на ЛА .
чем его открывать? Блокнот именно его открывать не хочет зависает.Да если и откроет это не поможет ибо другие файлы с этим форматом показывают какую-то тарабарщину.
Добавлено (01.03.2015, 01:17) --------------------------------------------- Блокнот открыл после долгого торможения как я и ожидал какая-то таробарщина.
Блокнот открыл после долгого торможения как я и ожидал какая-то таробарщина.
И ни чего удивительного. Файлы с расширением *.dll являются системными библиотеками (чего угодно в расширенном понимании) с ссылками на игровые и системные ресурсы - почитай "кормят" движок игры, имеют свой упаковщик, свой язык и пр. и пр. Это не текстовые файлы кодов для Луа, и "через блокнот" там делать нечего. В частности, для некоторых прицелов некоторых стволов в некоторых модах в данном файле сделаны изменения-дополнения, дабы была возможна функциональность данных игровых девайсов. Если короче - без спецзнаний лезть туда не стоит, т.е. без них без "фатальных последствий" вряд ли получится. "Учиться надо,Буратино!@папа Карло" (ко мне это тоже относится)
Сообщение отредактировал Korpus - Воскресенье, 01.03.2015, 01:40
Ребят помогите пожалуйста миниган перенести из оружейного пака Buusty в апдейт тт2,модель перенёс,текстуры тоже перенёс по указанному пути,и всё равно вылет..После переноса модели и текстур при спавне минигана был вот такой вылет there is no 'fire' bone for weapon 'wpn_m134_hud',после чего в конфигах минигана я изменил fire bone = fire на fire bone=wpn_body,и получил при спавне вот это
Доброго дня СТАЛКЕРы. Меня интересует спавен архаровской аномалии "ZVEZDA", а также конфиги её...В распакованных конфигах игры db0, db1 и далее... описания аномалии нет. И в all.spawn её найти не смог - нет в файлах (может просмотрел не всё...). А спавниться, как Вы все знаете она, то в "Пещере", то на "Болоте"... и т.д. Подскажите где её (аномалию "Zvezda" - ведь надо же было "зарыть" её под землю...) искать... Интересны в большей степени, точки её спавна, то есть расположения по лакациям, с нумерацией... Так же интересует, как можно править снорка и полтергейста, а то загрызают чут ли не сперваго-го-го раза... , а горячий шлейф "огненного" полтергейста совсем достал... В "Зове Припяти" и то более сбалансировано воздествие монстров... на ГГ. И ещё , Сидор - "лысая голова", предлагает за определенную сумму вернуть взаимоотношения между группировками... Расценки за "услуги" высокие... Все это прописано в файле escape_dialog в Trader Factions. Пытался менять (сумму за услугу - хоть в большую , хоть в меньшую...) в скрипте escape_dialog - функции перестают работать... В каких файлах нужно паралельно внести ещё изменения (в тексте файла stable_dialogs_arhara изменения диалога, никчему не приводят). Народ помогите разобраться в Архаровских правках и файлах... Большая благодарность тем СТАЛКЕРам, которые смогли обьяснить в прошлые разы, как работать с all spawn-ом... доходчиво...
Сталкер... ТЧ НС ДМХмод 135+ аддон by Saruman 1.1...
Сообщение отредактировал Ден - Понедельник, 02.03.2015, 15:42
Приветствую всех. Подскажите пожалуйста, что и где нужно подправить, чтобы группировка "Бандиты" была дружественна по отношению к группировке "Долг". А то с квестом затык, не успеваю зайти в ТД, как бандосы валят Макса Любера, даже с Пулей поговорить не успеваю. Потом все обратно верну.
Сообщение отредактировал IGOR™ - Понедельник, 02.03.2015, 15:53
что и где нужно подправить, чтобы группировка "Бандиты" была дружественна по отношению к группировке "Долг"
ЦитатаХ_и_м_и_к ()
поправь цифры в этих строчках на ноль. (все, на всякий случай)
Немного уточню: В файле game_relations внимательно рассмотрев таблицу увидим, что для изменения отношения группировок следует менять значения, которые являются центром пересечения по вертикали и горизонтали таблицы. Если брать отношения долгарей и бандосов, то рассматриваем: строка dolg = и столбец bandit, а также строка bandit = и столбец dolg. Примирение этих кланов будет в случае значения не менее 0 на пересечении указанных строк и столбцов. Т.е. строка dolg = должна выглядеть примерно так: dolg = 0, 250, -1250, 0, -2000, -650, -1500, 500, 650, -1500, 0, -2000, 0, 0, 0, 0,-1500, -1500 А строка bandit = bandit = -350, -1000, -150, -250, -1250, -2000, -500, -1000, 0, -150, 40, -2000, -1250, 0, -1250, -250,-1500, -1500 Выделенные значения должны быть выше или равны указанным. Не стоит экспериментировать с изменением количества пробелов и табуляцией в данной таблице (это я у себя в примере сократил длину строк для наглядности). После внесения правок требуется загрузка с ближайшего сейва до правки.
Доброго дня Всем. Извините, может вопрос тупой. Можно ли через файл ui_main_menu.script заспавнить в определенном месте авто? Не знаю, как сказать - прописать в файле клавишу (например F1), чтобы при нажатии Esc-F1-Esc вызвалась функция на спавн авто: function car_spawn() alife():create("vehicle_niva_offroad ",vector():set(-63.113,-9.931,-41.508),212929,78) end Как-то так.
Еще вопросик возник. Как убрать звук вертушки, либо удалить, как глючный объект, сам вертолет в Темной Долине? А то после выхода из Х-18 и уничтожения вояк, вертуха улетает за базу Борова и где-то остается под текстурами с вечным рокотом. НС+ОП+ЧШ. Я просто не знаю id этого объекта.