Кстати я кажется понял в чём прикол с партиклами. Грена юзает любой партикл, который рано или поздно исчезнет(пробовал кучу "бесконечных", ни один не запустился). А теперь вопрос, как сделать чтобы партикль через опр. время исчез.
Николай ФеНиКс
В одной теме(про анимации вроде) писали, что можно партикл привязать к костям, но в оригинале этого скрипта нет, а только в некоторых модах. То же бы хотел привязать.
Kurt-57
:lok5)
А не легче по этому пути взять?
Распакуй и всё! Futura
я нашёл скрипт вроде!=)
У электрохимеры партикл прописан же=)
Ну вот в амк нужно поковырять щаз будет=)
добавлено спустя 2 минут
такой вопрос:
Что Есть Хитмарки???? ( с Английским акцентом) :sarcastic:
class "amk_particle"
function amk_particle:__init(params)
self.type = params.typ or "absolute" --bone,absolute
self.dir = params.dir or vector():set(0,0,0)
self.len = params.len or 1
self.looped = params.looped or false
self.life_time = params.life_time or -1
self.obj = params.obj or nil
self.bone = params.bone or nil
self.pos = params.pos or nil
self.stop_on_death = params.stop_on_death or false
self.gravity = params.gravity or vector():set(0,0,0)
self.give_dmg = params.give_dmg or false
self.target = params.target or nil
if params.sound then
self.snd = sound_object(params.sound)
self.snd_looped = params.sound_looped or false
end
function amk_particle:__finalize()
self.particle:stop()
end
function amk_particle:start()
if not self.particle:playing() then
local pos
if self.bone and self.obj then
pos = self.obj:bone_position(self.bone)
elseif self.pos then
pos = self.pos
end
self.start_pos = pos
if pos then
if self.snd then
if self.snd_looped then
self.snd:play_at_pos(db.actor, pos, 1, sound_object.looped)
else
self.snd:play_at_pos(db.actor, pos)
end
self.snd=nil
end
self.particle:play_at_pos(pos)
self.started=true
end
end
end
function amk_particle:update(delta)
if self.finalized then return end
self.cgravity = self.cgravity:add(self.gravity)
if self.particle:playing() then
if self.life_time>-1 and time_global()>self.start_time+self.life_time then
self.started=false
self.looped=false
self:stop()
self.finalized=true
end
local pos
if self.bone and self.obj then
pos = self.obj:bone_position(self.bone)
self.pos = pos
elseif self.dir then
self.pos = self.pos:add(self.dir:set_length(self.len/self.life_time*delta))
self.pos = self.pos:add(self.cgravity)
pos = self.pos
end
if pos then
if self.snd and self.snd:playing() then
self.snd:set_position(pos)
end
self.particle:move_to(pos,vector():set(0,0,0))
end
else
if self.started then
if self.looped then
self:start()
end
end
end
end
function amk_particle:stop()
self.give_dmg=false
if self.particle:playing() then
self.particle:stop_deffered()
end
if self.snd and self.snd:playing() then
self.snd:stop()
end
end
function amk_particle:get_pos()
return self.pos
end
function amk_particle:is_finished()
return self.finalized
end
function amk_particle:on_death()
if self.stop_on_death then
self:stop()
end
end
отредактировал(а) Николай ФеНиКс: 01-11-2009 20:40 GMT3 час.
Доброго вечера! Где находится файл редактирования крови?(размер капель и т.д.) Хочу увеличить ее времяпребывание на поверхностях... Если такое возможно... Gamedata-Config-? :dry:
В файле \gamedata\config\system.ltx находим переменную start_blood_size и уменьшаем ее - это минимальный размер раны при котором идет кровь (пример: 0.1)
Чуть ниже находим blood_drop_size и увеличиваем – как понятно это размер капли крови (пример: 0.3)
singapur22
А за что же там отвечает файл: amk_particle.script
???
Там просто написаны вызовы чего-то...
Там нужно что-то мне переделывать?
добавлено спустя 19 минут
Хы...
А в bind_monster.script
Ваще всё удалено и написано:
local particles={} function bind(obj) printf("_bp: monster.bind: name='%s', id='%d'", obj:name(), obj:id()) local new_binder = generic_object_binder(obj) obj:bind_object(new_binder) end class "generic_object_binder" (object_binder) function generic_object_binder:__init(obj) super(obj) self.loaded = false self.chtime = 0 self.last_update = 0 self.particles = {} end function generic_object_binder:reload(section) object_binder.reload(self, section) end function generic_object_binder:reinit() object_binder.reinit(self) if self.object:clsid() ~= clsid.script_trader then self.object:set_patrol_extrapolate_callback(generic_object_binder.extrapolate_callback, self) end db.storage[self.object:id()] = { } self.st = db.storage[self.object:id()] self.object:set_callback(callback.patrol_path_in_point, self.waypoint_callback, self) self.object:set_callback(callback.hit, self.hit_callback, self) self.object:set_callback(callback.death, self.death_callback, self) end prevent_gulag_registration_for_id=0 function generic_object_binder:update(delta) object_binder.update(self, delta) if particles[self.object:id()] and table.getn(particles[self.object:id()])>0 then for kk,vv in pairs(particles[self.object:id()]) do table.insert(self.particles,amk_particle.amk_particle(vv)) table.remove(particles[self.object:id()],kk) end end if table.getn(self.particles)>0 then for kk,vv in pairs(self.particles) do if vv:is_finished() then self.particles[kk]=nil else vv:update(delta) if vv.give_dmg and vv.target then if vv:get_pos():distance_to(vv.target:bone_position("bip01_spine"))<1 then local h = hit() h.impulse = 0 h.draftsman = vv.target h.direction = vv.dir h:bone("bip01_spine") h.power = math.random(10,50)/100 h.type = hit.strike vv.target:hit(h) h.power = math.random(10,50)/100 h.type = hit.chemical_burn vv.target:hit(h) vv:stop() end end end end end if self.object:clsid() == clsid.script_trader then trade_manager.update(self.object) end if self.object:alive() then if self.object:is_talk_enabled() then self.object:set_tip_text("character_use") else self.object:set_tip_text("") end else self.object:set_tip_text_default() end self:anomaly_evade() local act_scheme = db.storage[self.object:id()].active_section or "" local is_fake = string.find(act_scheme, "mob_fake_death") or false if self.chtime0.05 then local npc=self.object:get_enemy() if npc then if npc:id()==db.actor:id() and db.actor:see(self.object) and self.object:see(db.actor) and math.random()<0.2 then level.add_pp_effector("radiation.ppe", 2012, false) local h = hit() h.type = hit.telepatic h.power = 0.02 h.impulse = 0.0 h:bone("bip01_spine") h.draftsman = self.object h.direction = self.object:direction() db.actor:hit(h) if math.random()<0.02 then local active_item = db.actor:active_item() if active_item and active_item:section()~= "bolt" and active_item:section()~= "wpn_knife" then db.actor:drop_item(active_item) end end end end end end if IsMonster(self.object) and time_global() - self.last_update > 1000 and not is_fake then if self.object:alive() and self.object.health>0.03 then if self.object:see(db.actor) and db.actor:position():distance_to(self.object:position())<40 then amk.enemy_see_actor(self.object,"monster") end if db.actor:see(self.object) and db.actor:position():distance_to(self.object:position())<80 then amk.actor_see_enemy(self.object,"monster") end end self.last_update = time_global() end local blowout=amk.load_variable("blowout",0) if blowout==3 and (not self.control_override) then if not self.object:action() then xr_logic.mob_capture(self.object,true) self.control_override=true end elseif self.control_override and blowout==3 then if not self.object:action() then local snds={sound.take_damage,sound.panic,sound.idle} local snd=snds[math.random(1,table.getn(snds))] action(self.object, anim(anim.lie_idle, 0), sound(snd), cond(cond.sound_end)) end elseif self.control_override and blowout~=3 then self.control_override=nil xr_logic.mob_release(self.object) elseif self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "update", delta) end end function generic_object_binder:anomaly_evade() local npc=self.object if npc:story_id()==29 then return end if not self.prev_pos then self.prev_pos=vector():set(0,-100,0) end if self.prev_pos:distance_to(npc:position())>20 then self.prev_pos=npc:position() local list=amk_anoms.get_anomaly_list(npc,30) for i,o in ipairs(list) do amk_anoms.add_restriction(npc,o.id,o.name) end end if amk_anoms.have_pending_sync(npc) then amk_anoms.syncronize(npc) end end function generic_object_binder:extrapolate_callback() if (self.object == nil) then return false end local cur_pt = self.object:get_current_point_index() if self.object:get_script () == false then return false end if patrol(self.object:patrol()):flags(cur_pt):get() == 0 then return true end return false end function generic_object_binder:waypoint_callback(obj, action_type, index) if self.st.active_section ~= nil then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "waypoint_callback", obj, action_type, index) end end function generic_object_binder:death_callback(victim, who) if (self.object == nil) then return end if who:id() == db.actor:id() then xr_statistic.addKillCount(self.object) end if self.st.mob_death then xr_logic.issue_event(self.object, self.st.mob_death, "death_callback", victim, who) end if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "death_callback", victim, who) end smart_terrain.on_death( self.object:id() ) local h = hit() h.draftsman = self.object h.type = hit.fire_wound h.direction = db.actor:position():sub(self.object:position()) h:bone("pelvis") h.power = 1 h.impulse = 10 self.object:hit(h) local mob=self.object if mob:clsid()==clsid.controller_s then local zomb=amk.load_table("zombies") for k,v in pairs(zomb) do if v.master==mob:id() then if amk_mod.dezombify(k,v) then zomb[k]=nil end end end amk.save_table("zombies",zomb) end if table.getn(self.particles)>0 then for kk,vv in pairs(self.particles) do vv:on_death() end end amk.on_death(victim, who) end function generic_object_binder:hit_callback(obj, amount, local_direction, who, bone_index) if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "hit_callback", obj, amount, local_direction, who, bone_index) end if self.st.hit then xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index) end if bone_index==14 and string.find(obj:section(),"bloodsucker") then local h=hit() h.type = hit.fire_wound h.power = 100*local_direction.x*local_direction.x*local_direction.x*local_direction.x h.impulse = h.power h.draftsman = who h.direction = vector():set(0,-1,0) obj:hit(h) end amk.on_monster_hit(obj, amount, local_direction, who, bone_index) if self.object:section()=="electro_chimera" and time_global()>(self.charge_time or 0)+3000 then amk_particle.amk_particle({ particle="anomaly2\\electra2_blast", pos=self.object:bone_position("bip01_spine"), sound="anomaly\\electra_blast1" }) local dist = db.actor:position():distance_to(self.object:bone_position("bip01_spine")) if dist < 20 then local h = hit() h.impulse = 0 h.draftsman = db.actor h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 1/dist h.type = hit.strike db.actor:hit(h) h.power = 15/dist h.type = hit.shock db.actor:hit(h) end self.charge_time=time_global() end end function generic_object_binder:net_spawn(sobject) if not object_binder.net_spawn(self, sobject) then return false end db.add_obj(self.object) xr_gulag.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_mobile, self.loaded ) amk.on_net_spawn(self.object) local particle_param = utils.cfg_get_string(system_ini(), self.object:section(), "bones_particles", null, false, false, nil) if particle_param and system_ini():section_exist(particle_param) then local tmp=amk.parse_ini_section_to_array(system_ini(),particle_param) for k,v in pairs(tmp) do local t = amk.parse_ini_section_to_array(system_ini(), v) t.obj = self.object if not t.stop_on_death or self.object:alive() then play_particle(self.object, t) end end end return true end function generic_object_binder:net_destroy() if table.getn(self.particles)>0 then for kk,vv in pairs(self.particles) do if not vv:is_finished() then vv:stop() self.particles[kk]=nil end end end amk.on_monster_go_offline(self.object) self.object:set_callback(callback.death, nil) self.object:set_callback(callback.patrol_path_in_point, nil) self.object:set_callback(callback.hit, nil) local st = db.storage[self.object:id()] if st and st.active_scheme then xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy") end db.del_obj(self.object) db.storage[self.object:id()] = nil local id=self.object:id() object_binder.net_destroy(self) local sobj=alife():object(id) if sobj and IsMonster(sobj) then local tbl=amk.read_monster_params(sobj) tbl.crvu32u16u2={} amk.write_monster_params(tbl,sobj) else end end function generic_object_binder:reload(section) object_binder.reload(self, section) end function generic_object_binder:net_save_relevant() return true end function generic_object_binder:save(packet) printf("generic_object_binder:save(): self.object:name()='%s'", self.object:name()) object_binder.save(self, packet) xr_logic.save_obj(self.object, packet) if self.object:clsid() == clsid.script_trader then trade_manager.save(self.object, packet) end end function generic_object_binder:load(reader) self.loaded = true printf("generic_object_binder:load(): self.object:name()='%s'", self.object:name()) object_binder.load(self, reader) if reader:r_eof() then abort("SAVE FILE IS CORRUPT "..self.object:name()) end xr_logic.load_obj(self.object, reader) if self.object:clsid() == clsid.script_trader then trade_manager.load(self.object, reader) end end function play_particle(obj,params) if not particles[obj:id()] then particles[obj:id()]={} end table.insert(particles[obj:id()],params) end
И что же от сюда нужное!?
отредактировал(а) Николай ФеНиКс: 02-11-2009 08:57 GMT3 час.
Влад-Счастливчик А расширение фаила сменить трудно? чёрез фаил->сохранить как->и вписываешь название и расширение.
Но как я помню расширение не .ltx а .script
Emilka_STALKER
Имя ГГ: gamedata\config\text\rus\stable_bio_name.xml
Инвентарь(то что у ГГ в рюкзаке) all.spawn
------------------------------------------------------- Volodka
В обще самая распространённая прога-это Блокнот!
А так нужны: Распаковщик ,Блокнот, 3D MaX, SDK+ конвертер от бардака, Фотошоп+ плагин .dds; И т.д.
А самое Главное ЗНАНИЯ и ЖЕЛАНИЕ!
------------------------------------------------------- Kurt-57
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.