Это популярное сообщение. Dennis_Chikin 3 658 Опубликовано 16 Мая 2014 Это популярное сообщение. Поделиться Опубликовано 16 Мая 2014 Ковыряемся в файлах ТЧ Прежде чем писать в тему - внимательно читаем первый пост, и пользуемся поиском. Возможно, ответ на Ваш вопрос уже есть. Касательно телепатии: если Вы передаете Ваши файлы телепатическим путем - ответы будут передаваться тоже телепатически. Если Вы предлагаете угадать, отчего у Вас в подвале происходит странный стук - ответ будет передан стуком. 4 8 6 12 Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
naxac 2 445 Опубликовано 18 Декабря 2018 Поделиться Опубликовано 18 Декабря 2018 @Змея, не в кастом-дате, а в нет-пакете. По идее нет, но читал где-то на форуме, что были проблемы со смартами из-за рестриктора, то ли ин-, то ли аут-, на месте смарта - неписи так же разбегались. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Dead_Land 4 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 Ребят, тут мод скачал https://goo.gl/K73TMj но есть проблема в нем одна автор мода поломал инвентарь в bind_monster инвентарь монстров* он отрывается только если убить мутанта а затем сделать Save и Load ну вы поняли и еще он всегда пуст как можно решить эту проблему я в свой мод вставил а тут такое кто поможет тому спасибо от души и когда доработаю мод не забуду указать помощь) ----------------------------------------------------------------------------------- -- Monster binding ----------------------------------------------------------------------------------- Скрытый текст local particles={} local table_enemy_cont = {} local rand = math.random(1,100) local BurerNum local BurerTimer = 0 local song_start_sucks = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\vampire_sucking") function bind(obj) printf("_bp: monster.bind: name='%s', id='%d'", obj:name(), obj:id()) -- Для спауна --xr_spawner.spawn_client(obj) 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.particles = {} self.MutantManager = ogsm_mutants.MutantManager() self.chtime = 0 self.last_update = 0 self.start_anim_hit_cont = false self.start_anim_hit_blood = false self.start_hit = false 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 function generic_object_binder:update(delta) if string.find(self.object:name(), "crow_") then return false end 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 -- amk.mylog("particle found") 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) end end end -- printf("_bp: generic_object_binder: UPDATE [name='%s' time=%d]", -- self.object:name(), time_global()) -- Апдейт торговли if self.object:clsid() == clsid.script_trader then trade_manager.update(self.object) end if self.object:clsid() == clsid.controller_s and self.object:alive() == true and time_global()>(self.upd_time or 0) then self.upd_time = time_global() + 1500 local dist = self.object:position():distance_to(db.actor:position()) if dist < 50 then if math.random()<(dist*0.1) then if phantom_manager.phantom_count()<5 then local yaw = math.pi*2.0*math.random() local radius = 30*(math.random()/2.0+0.5) local height = 2.5*math.random() local a_pos = db.actor:position() local pos = vector():set(math.sin(yaw)*radius+a_pos.x,a_pos.y+height,math.cos(yaw)*radius+a_pos.z) phantom_manager.spawn_phantom(pos) end end end 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 -- Удар контролёра руками из Зова Припяти (Автор: demover123) if self.object:clsid() == clsid.controller_s then local target = self.object:get_enemy() if target and self.object:see(target) and IsStalker(target) then local dist = self.object:position():distance_to(target:position()) if dist <= 1.7 then if not self.get_hit then self.get_hit = time_global() + 100 self.start_anim_hit_cont = true elseif self.get_hit <= time_global() then if self.start_anim_hit_cont then if self.object:animation_count() > 0 then self.object:clear_animations() end self.object:play_cycle("stand_attack_1", true) local song_start = xr_sound.get_safe_sound_object("monsters\\controller\\controller_hit_2") song_start:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.start_anim_hit_cont = false end if not self.hit_to_enemy then self.hit_to_enemy = time_global() + 300 elseif self.hit_to_enemy <= time_global() then level.add_cam_effector("camera_effects\\hit_back_left.anm", 777, false, "") local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.40 h.impulse = 1 h.type = hit.wound target:hit(h) self.hit_to_enemy = nil self.get_hit = nil end end else self.hit_to_enemy = nil self.get_hit = nil end end if self.object:animation_count() < 1 then local i = math.random(0,5) self.object:add_animation("stand_walk_fwd_"..i, true) end end -- Новое повидение кровососа (Автор: demover123) if self.object:clsid() == clsid.bloodsucker_s then local target = self.object:get_enemy() if target and self.object:see(target) and (IsStalker(target) or IsMonster(target)) then local dist = self.object:position():distance_to(target:position()) if dist < 1.5 then if not self.sucks and not self.steal then rand = math.random(0,100) if rand > 90 then if self.object.health < 1.0 then self.sucks = true end elseif rand < 90 and rand > 70 then local active_slot = db.actor:active_slot() if active_slot==1 or active_slot==2 then self.steal = true end end end if self.steal then if not self.start_steal then self.object:set_invisible(false) self.object:play_cycle("!stand_attack_1", true) local song_steal = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\hit_"..math.random(0,3)) if not song_steal:playing() then song_steal:play_at_pos(self.object, self.object:position(), sound_object.s3d) end self.start_steal = time_global() + 400 end if self.start_steal <= time_global() then db.actor:drop_item(db.actor:active_item()) local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.10 h.impulse = 1 h.type = hit.wound target:hit(h) self.start_steal = nil self.steal = false self.object:set_invisible(true) end end if self.sucks then if self.object:animation_count() > 0 then self.object:clear_animations() end if not self.bool_vamp_0 then db.actor:hide_weapon() self.object:set_invisible(false) level.disable_input() level.hide_indicators() target:set_actor_direction(-self.object:position():sub(target:position()):getH()) self.object:play_cycle("vampire_0", true) self.bool_vamp_0 = true end if not self.first_step then self.first_step = time_global() + 1000 elseif self.first_step and self.first_step <= time_global() then if self.object:animation_count() > 0 then self.object:clear_animations() end if not self.bool_vamp_1 then self.object:set_invisible(false) self.object:play_cycle("vampire_1", true) level.add_pp_effector("escape.ppe",778,true) song_start_sucks:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.bool_vamp_1 = true end if not self.bool_next_step then self.second_step = time_global() + 2000 self.bool_next_step = true end if self.second_step <= time_global() then self.object:position():sub(target:position()):normalize() if not self.ending_sucks then self.ending_sucks = time_global() + 700 self.object:set_invisible(false) local song_start = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\vampire_hit") song_start:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.object:play_cycle("vampire_2", true) end if self.ending_sucks <= time_global() then level.add_cam_effector("camera_effects\\hit_back_right.anm", 779, false, "") local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.40 h.impulse = 1 h.type = hit.wound target:hit(h) self.object.health = self.object.health + 0.1 db.actor:restore_weapon() level.remove_pp_effector(778) self.sucks = false self.first_step = nil self.second_step = nil self.bool_next_step = false self.bool_vamp_0 = false self.bool_vamp_1 = false self.object:set_invisible(true) rand = math.random(1,100) level.enable_input() level.show_indicators() self.ending_sucks = nil end end end end else if self.sucks then db.actor:restore_weapon() level.remove_pp_effector(778) self.object:clear_animations() self.object:set_invisible(true) self.object:set_invisible(false) if song_start_sucks:playing() then song_start_sucks:stop() end self.sucks = false self.first_step = nil self.second_step = nil self.bool_next_step = false self.bool_vamp_0 = false self.bool_vamp_1 = false level.enable_input() level.show_indicators() elseif self.steal then self.steal = false end end end if target and not self.object:see(target) then local dist = self.object:position():distance_to(target:position()) if dist < 20 then if not self.time_to_boogie then self.time_to_boogie = time_global() + (math.random(5,10) * 1000) end if self.time_to_boogie <= time_global() then self.object:set_invisible(false) self.object:play_cycle("stand_threaten_0", true) local song_boogie = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\bloodsucker_script_attack_"..math.random(0,1)) if not song_boogie:playing() then song_boogie:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 3.0) end if not self.gotoinvis then self.gotoinvis = true else self.object:set_invisible(true) self.time_to_boogie = nil self.gotoinvis = false end end end end end -- Атака бюрера из Зова Припяти (Авторы: Shadows and Charsi and demover123) if self.object:clsid()==clsid.burer_s and BurerTimer < time_global() then local target = self.object:get_enemy() local v1 = self.object:direction() local v2 = db.actor:direction() if target and (target:id()==0) and (v1.x*v2.x)+(v1.z*v2.z)<-0.6 and self.object:see(db.actor) and self.object:position():distance_to(db.actor:position())<6 then BurerNum = 1 db.actor.power = -1.0 local active_slot = db.actor:active_slot() if active_slot==1 or active_slot==2 then db.actor:drop_item(db.actor:active_item()) self.object:play_cycle("stand_attack_0", false) end BurerTimer = time_global() + 6000*(1+math.random(-0.2,0.2)) self.object:add_animation("stand_idle_"..math.random(0,2), true) elseif BurerNum and BurerTimer < time_global() + 6000 then self.object:add_animation("stand_idle_"..math.random(0,2), true) BurerNum = nil end end -- Химера ищет жертву стоя на задних лапах идея была взята из одного квеста в Зове Припяти (Автор: demover123) if self.object:clsid()==clsid.chimera_s then local target = self.object:get_enemy() if target and not self.object:see(target) and IsStalker(target) then local dist = self.object:position():distance_to(target:position()) if dist < 10 then if not self.find then if self.object:animation_count() > 0 then self.object:clear_animations() end self.object:play_cycle("look_around_0", false) if not self.time_to_next_find then self.time_to_next_find = time_global() + 4000 end self.find = true else if self.time_to_next_find <= time_global() then self.find = false self.time_to_next_find = nil end end end end end else self.object:set_tip_text_default() end if IsMonster(self.object) and time_global() - self.last_update > 1000 then if self.object:alive() and self.object.health>0.01 then if self.object:see(db.actor) and db.actor:position():distance_to(self.object:position())<80*80 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*80 then amk.actor_see_enemy(self.object,"monster") end end self.last_update = time_global() end self.MutantManager:update(self.object) if 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:extrapolate_callback() 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 --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: true", cur_pt) return true end --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: false", cur_pt) 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 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 victim:set_nonscript_usable(false) 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) if table.getn(self.particles)>0 then for kk,vv in pairs(self.particles) do vv:on_death() end end self.MutantManager:on_death(self.object) smart_monster_parts.death_spawn(victim) end function generic_object_binder:hit_callback(obj, amount, local_direction, who, bone_index) -- printf("HIT_CALLBACK: [%s] amount[%s]", obj:name(), amount) if self.st.hit then xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index) end amk.on_monster_hit(obj, amount, local_direction, who, bone_index) -- Щит бюрера из Зова Припяти (Автор: demover123) if self.object:clsid()==clsid.burer_s then if not self.time_hit then self.time_hit = time_global() + 4000 end self.object:play_cycle("stand_tele_1", false) local particle_start = particles_object("anomaly2\\burer_shield_01") particle_start:play_at_pos(self.object:bone_position("bip01_head")) self.object.health = self.object.health + 0.1 if self.time_hit <= time_global() then if self.object:animation_count() > 0 then self.object:clear_animations() particle_start:stop() end end end end function generic_object_binder:net_spawn(sobject) if string.find(self.object:name(), "crow_") then local sobj = alife():object(self.object:id()) if sobj then alife():release(sobj, true) return false end end if not object_binder.net_spawn(self, sobject) then return false end news_main_spawn.on_spawn(self.object) db.add_obj(self.object) xr_gulag.setup_gulag_and_logic_on_spawn( self.object, self.st, sobject, modules.stype_mobile, self.loaded ) 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 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 object_binder.net_destroy(self) end function generic_object_binder:reload(section) object_binder.reload(self, section) --printf("generic_object_binder:reload(): self.object:name()='%s'", self.object:name()) end function generic_object_binder:net_save_relevant() --printf("generic_object_binder:net_save_relevant(): self.object:name()='%s'", self.object:name()) return true end function generic_object_binder:save(packet) if string.find(self.object:name(), "crow_") then return false end 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) if string.find(self.object:name(), "crow_") then return false end 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") 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 Ссылка на комментарий
Dead_Land 4 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 Вот код из архива мода с ошибкой сверху ошибся. ----------------------------------------------------------------------------------- -- Monster binding ----------------------------------------------------------------------------------- Скрытый текст local table_enemy_cont = {} local rand = math.random(1,100) local BurerNum local BurerTimer = 0 local song_start_sucks = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\vampire_sucking") function bind(obj) printf("_bp: monster.bind: name='%s', id='%d'", obj:name(), obj:id()) -- Для спауна --xr_spawner.spawn_client(obj) 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.start_anim_hit_cont = false self.start_anim_hit_blood = false self.start_hit = false 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 function generic_object_binder:update(delta) object_binder.update(self, delta) -- printf("_bp: generic_object_binder: UPDATE [name='%s' time=%d]", -- self.object:name(), time_global()) -- Апдейт торговли 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 -- Удар контролёра руками из Зова Припяти (Автор: demover123) if self.object:clsid() == clsid.controller_s then local target = self.object:get_enemy() if target and self.object:see(target) and IsStalker(target) then local dist = self.object:position():distance_to(target:position()) if dist <= 1.7 then if not self.get_hit then self.get_hit = time_global() + 100 self.start_anim_hit_cont = true elseif self.get_hit <= time_global() then if self.start_anim_hit_cont then if self.object:animation_count() > 0 then self.object:clear_animations() end self.object:play_cycle("stand_attack_1", true) local song_start = xr_sound.get_safe_sound_object("monsters\\controller\\controller_hit_2") song_start:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.start_anim_hit_cont = false end if not self.hit_to_enemy then self.hit_to_enemy = time_global() + 300 elseif self.hit_to_enemy <= time_global() then level.add_cam_effector("camera_effects\\hit_back_left.anm", 777, false, "") local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.40 h.impulse = 1 h.type = hit.wound target:hit(h) self.hit_to_enemy = nil self.get_hit = nil end end else self.hit_to_enemy = nil self.get_hit = nil end end if self.object:animation_count() < 1 then local i = math.random(0,5) self.object:add_animation("stand_walk_fwd_"..i, true) end end -- Новое повидение кровососа (Автор: demover123) if self.object:clsid() == clsid.bloodsucker_s then local target = self.object:get_enemy() if target and self.object:see(target) and (IsStalker(target) or IsMonster(target)) then local dist = self.object:position():distance_to(target:position()) if dist < 1.5 then if not self.sucks and not self.steal then rand = math.random(0,100) if rand > 90 then if self.object.health < 1.0 then self.sucks = true end elseif rand < 90 and rand > 70 then local active_slot = db.actor:active_slot() if active_slot==1 or active_slot==2 then self.steal = true end end end if self.steal then if not self.start_steal then self.object:set_invisible(false) self.object:play_cycle("!stand_attack_1", true) local song_steal = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\hit_"..math.random(0,3)) if not song_steal:playing() then song_steal:play_at_pos(self.object, self.object:position(), sound_object.s3d) end self.start_steal = time_global() + 400 end if self.start_steal <= time_global() then db.actor:drop_item(db.actor:active_item()) local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.10 h.impulse = 1 h.type = hit.wound target:hit(h) self.start_steal = nil self.steal = false self.object:set_invisible(true) end end if self.sucks then if self.object:animation_count() > 0 then self.object:clear_animations() end if not self.bool_vamp_0 then db.actor:hide_weapon() self.object:set_invisible(false) level.disable_input() level.hide_indicators() target:set_actor_direction(-self.object:position():sub(target:position()):getH()) self.object:play_cycle("vampire_0", true) self.bool_vamp_0 = true end if not self.first_step then self.first_step = time_global() + 1000 elseif self.first_step and self.first_step <= time_global() then if self.object:animation_count() > 0 then self.object:clear_animations() end if not self.bool_vamp_1 then self.object:set_invisible(false) self.object:play_cycle("vampire_1", true) level.add_pp_effector("escape.ppe",778,true) song_start_sucks:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.bool_vamp_1 = true end if not self.bool_next_step then self.second_step = time_global() + 2000 self.bool_next_step = true end if self.second_step <= time_global() then self.object:position():sub(target:position()):normalize() if not self.ending_sucks then self.ending_sucks = time_global() + 700 self.object:set_invisible(false) local song_start = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\vampire_hit") song_start:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.object:play_cycle("vampire_2", true) end if self.ending_sucks <= time_global() then level.add_cam_effector("camera_effects\\hit_back_right.anm", 779, false, "") local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.40 h.impulse = 1 h.type = hit.wound target:hit(h) self.object.health = self.object.health + 0.1 db.actor:restore_weapon() level.remove_pp_effector(778) self.sucks = false self.first_step = nil self.second_step = nil self.bool_next_step = false self.bool_vamp_0 = false self.bool_vamp_1 = false self.object:set_invisible(true) rand = math.random(1,100) level.enable_input() level.show_indicators() self.ending_sucks = nil end end end end else if self.sucks then db.actor:restore_weapon() level.remove_pp_effector(778) self.object:clear_animations() self.object:set_invisible(true) self.object:set_invisible(false) if song_start_sucks:playing() then song_start_sucks:stop() end self.sucks = false self.first_step = nil self.second_step = nil self.bool_next_step = false self.bool_vamp_0 = false self.bool_vamp_1 = false level.enable_input() level.show_indicators() elseif self.steal then self.steal = false end end end if target and not self.object:see(target) then local dist = self.object:position():distance_to(target:position()) if dist < 20 then if not self.time_to_boogie then self.time_to_boogie = time_global() + (math.random(5,10) * 1000) end if self.time_to_boogie <= time_global() then self.object:set_invisible(false) self.object:play_cycle("stand_threaten_0", true) local song_boogie = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\bloodsucker_script_attack_"..math.random(0,1)) if not song_boogie:playing() then song_boogie:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 3.0) end if not self.gotoinvis then self.gotoinvis = true else self.object:set_invisible(true) self.time_to_boogie = nil self.gotoinvis = false end end end end end -- Атака бюрера из Зова Припяти (Авторы: Shadows and Charsi and demover123) if self.object:clsid()==clsid.burer_s and BurerTimer < time_global() then local target = self.object:get_enemy() local v1 = self.object:direction() local v2 = db.actor:direction() if target and (target:id()==0) and (v1.x*v2.x)+(v1.z*v2.z)<-0.6 and self.object:see(db.actor) and self.object:position():distance_to(db.actor:position())<6 then BurerNum = 1 db.actor.power = -1.0 local active_slot = db.actor:active_slot() if active_slot==1 or active_slot==2 then db.actor:drop_item(db.actor:active_item()) self.object:play_cycle("stand_attack_0", false) end BurerTimer = time_global() + 6000*(1+math.random(-0.2,0.2)) self.object:add_animation("stand_idle_"..math.random(0,2), true) elseif BurerNum and BurerTimer < time_global() + 6000 then self.object:add_animation("stand_idle_"..math.random(0,2), true) BurerNum = nil end end -- Химера ищет жертву стоя на задних лапах идея была взята из одного квеста в Зове Припяти (Автор: demover123) if self.object:clsid()==clsid.chimera_s then local target = self.object:get_enemy() if target and not self.object:see(target) and IsStalker(target) then local dist = self.object:position():distance_to(target:position()) if dist < 10 then if not self.find then if self.object:animation_count() > 0 then self.object:clear_animations() end self.object:play_cycle("look_around_0", false) if not self.time_to_next_find then self.time_to_next_find = time_global() + 4000 end self.find = true else if self.time_to_next_find <= time_global() then self.find = false self.time_to_next_find = nil end end end end end else self.object:set_tip_text_default() end if 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:extrapolate_callback() 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 --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: true", cur_pt) return true end --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: false", cur_pt) 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 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 victim:set_nonscript_usable(false) 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) end function generic_object_binder:hit_callback(obj, amount, local_direction, who, bone_index) -- printf("HIT_CALLBACK: [%s] amount[%s]", obj:name(), amount) if self.st.hit then xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index) end -- Щит бюрера из Зова Припяти (Автор: demover123) if self.object:clsid()==clsid.burer_s then if not self.time_hit then self.time_hit = time_global() + 4000 end self.object:play_cycle("stand_tele_1", false) local particle_start = particles_object("anomaly2\\burer_shield_01") particle_start:play_at_pos(self.object:bone_position("bip01_head")) self.object.health = self.object.health + 0.1 if self.time_hit <= time_global() then if self.object:animation_count() > 0 then self.object:clear_animations() particle_start:stop() end end 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 ) return true end function generic_object_binder:net_destroy() 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 object_binder.net_destroy(self) end function generic_object_binder:reload(section) object_binder.reload(self, section) --printf("generic_object_binder:reload(): self.object:name()='%s'", self.object:name()) end function generic_object_binder:net_save_relevant() --printf("generic_object_binder:net_save_relevant(): self.object:name()='%s'", self.object:name()) 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") end xr_logic.load_obj(self.object, reader) if self.object:clsid() == clsid.script_trader then trade_manager.load(self.object, reader) end end Добавлено BFG, 20 Декабря 2018 Злостное предупреждение. Посты поправил. Ещё один такой пост с портянкой на тыщщу строк без спойлера и тебе бан. Ссылка на комментарий
Змея 240 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 О господя... Что это было? 1 1 Ссылка на комментарий
UriZzz 1 004 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 (изменено) @Dead_Land, не прятать такие портянки под спойлер в зоне опасно, в месных лесах водятся злые контролёры, админы и модераторы готовые по обедать незадачливым сталкером в любой момент. И научись редактировать посты, даблпостинг здесь то же не приветствуется Изменено 20 Декабря 2018 пользователем UriZzz Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
BFG 7 582 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 @UriZzz, Ты очень даже прав. Всякие злые монстры на АМК иной раз встречаются. Посты поправил. Пред вынес. 2 2 "Кругом зомби.....у меня кончаются патроны...." Ссылка на комментарий
UriZzz 1 004 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 (изменено) @BFG, нуууу не злые но строгие, не говорю что это плохо, скорее наоборот... Изменено 20 Декабря 2018 пользователем UriZzz Моя нычка, Нычка в арендованном у Опричника холодильнике Мы хорошие ребята, жаль патронов маловато:) Ссылка на комментарий
Dead_Land 4 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 2 часа назад, Dead_Land сказал: Вот код из архива мода с ошибкой сверху ошибся. ----------------------------------------------------------------------------------- -- Monster binding ----------------------------------------------------------------------------------- Показать local table_enemy_cont = {} local rand = math.random(1,100) local BurerNum local BurerTimer = 0 local song_start_sucks = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\vampire_sucking") function bind(obj) printf("_bp: monster.bind: name='%s', id='%d'", obj:name(), obj:id()) -- Для спауна --xr_spawner.spawn_client(obj) 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.start_anim_hit_cont = false self.start_anim_hit_blood = false self.start_hit = false 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 function generic_object_binder:update(delta) object_binder.update(self, delta) -- printf("_bp: generic_object_binder: UPDATE [name='%s' time=%d]", -- self.object:name(), time_global()) -- Апдейт торговли 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 -- Удар контролёра руками из Зова Припяти (Автор: demover123) if self.object:clsid() == clsid.controller_s then local target = self.object:get_enemy() if target and self.object:see(target) and IsStalker(target) then local dist = self.object:position():distance_to(target:position()) if dist <= 1.7 then if not self.get_hit then self.get_hit = time_global() + 100 self.start_anim_hit_cont = true elseif self.get_hit <= time_global() then if self.start_anim_hit_cont then if self.object:animation_count() > 0 then self.object:clear_animations() end self.object:play_cycle("stand_attack_1", true) local song_start = xr_sound.get_safe_sound_object("monsters\\controller\\controller_hit_2") song_start:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.start_anim_hit_cont = false end if not self.hit_to_enemy then self.hit_to_enemy = time_global() + 300 elseif self.hit_to_enemy <= time_global() then level.add_cam_effector("camera_effects\\hit_back_left.anm", 777, false, "") local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.40 h.impulse = 1 h.type = hit.wound target:hit(h) self.hit_to_enemy = nil self.get_hit = nil end end else self.hit_to_enemy = nil self.get_hit = nil end end if self.object:animation_count() < 1 then local i = math.random(0,5) self.object:add_animation("stand_walk_fwd_"..i, true) end end -- Новое повидение кровососа (Автор: demover123) if self.object:clsid() == clsid.bloodsucker_s then local target = self.object:get_enemy() if target and self.object:see(target) and (IsStalker(target) or IsMonster(target)) then local dist = self.object:position():distance_to(target:position()) if dist < 1.5 then if not self.sucks and not self.steal then rand = math.random(0,100) if rand > 90 then if self.object.health < 1.0 then self.sucks = true end elseif rand < 90 and rand > 70 then local active_slot = db.actor:active_slot() if active_slot==1 or active_slot==2 then self.steal = true end end end if self.steal then if not self.start_steal then self.object:set_invisible(false) self.object:play_cycle("!stand_attack_1", true) local song_steal = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\hit_"..math.random(0,3)) if not song_steal:playing() then song_steal:play_at_pos(self.object, self.object:position(), sound_object.s3d) end self.start_steal = time_global() + 400 end if self.start_steal <= time_global() then db.actor:drop_item(db.actor:active_item()) local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.10 h.impulse = 1 h.type = hit.wound target:hit(h) self.start_steal = nil self.steal = false self.object:set_invisible(true) end end if self.sucks then if self.object:animation_count() > 0 then self.object:clear_animations() end if not self.bool_vamp_0 then db.actor:hide_weapon() self.object:set_invisible(false) level.disable_input() level.hide_indicators() target:set_actor_direction(-self.object:position():sub(target:position()):getH()) self.object:play_cycle("vampire_0", true) self.bool_vamp_0 = true end if not self.first_step then self.first_step = time_global() + 1000 elseif self.first_step and self.first_step <= time_global() then if self.object:animation_count() > 0 then self.object:clear_animations() end if not self.bool_vamp_1 then self.object:set_invisible(false) self.object:play_cycle("vampire_1", true) level.add_pp_effector("escape.ppe",778,true) song_start_sucks:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.bool_vamp_1 = true end if not self.bool_next_step then self.second_step = time_global() + 2000 self.bool_next_step = true end if self.second_step <= time_global() then self.object:position():sub(target:position()):normalize() if not self.ending_sucks then self.ending_sucks = time_global() + 700 self.object:set_invisible(false) local song_start = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\vampire_hit") song_start:play_at_pos(self.object, self.object:position(), sound_object.s3d) self.object:play_cycle("vampire_2", true) end if self.ending_sucks <= time_global() then level.add_cam_effector("camera_effects\\hit_back_right.anm", 779, false, "") local h = hit() h.draftsman = self.object h.direction = vector():set(0,0,0) h:bone("bip01_spine") h.power = 0.40 h.impulse = 1 h.type = hit.wound target:hit(h) self.object.health = self.object.health + 0.1 db.actor:restore_weapon() level.remove_pp_effector(778) self.sucks = false self.first_step = nil self.second_step = nil self.bool_next_step = false self.bool_vamp_0 = false self.bool_vamp_1 = false self.object:set_invisible(true) rand = math.random(1,100) level.enable_input() level.show_indicators() self.ending_sucks = nil end end end end else if self.sucks then db.actor:restore_weapon() level.remove_pp_effector(778) self.object:clear_animations() self.object:set_invisible(true) self.object:set_invisible(false) if song_start_sucks:playing() then song_start_sucks:stop() end self.sucks = false self.first_step = nil self.second_step = nil self.bool_next_step = false self.bool_vamp_0 = false self.bool_vamp_1 = false level.enable_input() level.show_indicators() elseif self.steal then self.steal = false end end end if target and not self.object:see(target) then local dist = self.object:position():distance_to(target:position()) if dist < 20 then if not self.time_to_boogie then self.time_to_boogie = time_global() + (math.random(5,10) * 1000) end if self.time_to_boogie <= time_global() then self.object:set_invisible(false) self.object:play_cycle("stand_threaten_0", true) local song_boogie = xr_sound.get_safe_sound_object("monsters\\bloodsucker\\bloodsucker_script_attack_"..math.random(0,1)) if not song_boogie:playing() then song_boogie:play_no_feedback(db.actor, sound_object.s2d, 0, vector(), 3.0) end if not self.gotoinvis then self.gotoinvis = true else self.object:set_invisible(true) self.time_to_boogie = nil self.gotoinvis = false end end end end end -- Атака бюрера из Зова Припяти (Авторы: Shadows and Charsi and demover123) if self.object:clsid()==clsid.burer_s and BurerTimer < time_global() then local target = self.object:get_enemy() local v1 = self.object:direction() local v2 = db.actor:direction() if target and (target:id()==0) and (v1.x*v2.x)+(v1.z*v2.z)<-0.6 and self.object:see(db.actor) and self.object:position():distance_to(db.actor:position())<6 then BurerNum = 1 db.actor.power = -1.0 local active_slot = db.actor:active_slot() if active_slot==1 or active_slot==2 then db.actor:drop_item(db.actor:active_item()) self.object:play_cycle("stand_attack_0", false) end BurerTimer = time_global() + 6000*(1+math.random(-0.2,0.2)) self.object:add_animation("stand_idle_"..math.random(0,2), true) elseif BurerNum and BurerTimer < time_global() + 6000 then self.object:add_animation("stand_idle_"..math.random(0,2), true) BurerNum = nil end end -- Химера ищет жертву стоя на задних лапах идея была взята из одного квеста в Зове Припяти (Автор: demover123) if self.object:clsid()==clsid.chimera_s then local target = self.object:get_enemy() if target and not self.object:see(target) and IsStalker(target) then local dist = self.object:position():distance_to(target:position()) if dist < 10 then if not self.find then if self.object:animation_count() > 0 then self.object:clear_animations() end self.object:play_cycle("look_around_0", false) if not self.time_to_next_find then self.time_to_next_find = time_global() + 4000 end self.find = true else if self.time_to_next_find <= time_global() then self.find = false self.time_to_next_find = nil end end end end end else self.object:set_tip_text_default() end if 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:extrapolate_callback() 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 --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: true", cur_pt) return true end --printf("_bp: generic_object_binder: extrapolate_callback: cur_pt = %d: false", cur_pt) 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 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 victim:set_nonscript_usable(false) 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) end function generic_object_binder:hit_callback(obj, amount, local_direction, who, bone_index) -- printf("HIT_CALLBACK: [%s] amount[%s]", obj:name(), amount) if self.st.hit then xr_logic.issue_event(self.object, self.st.hit, "hit_callback", obj, amount, local_direction, who, bone_index) end -- Щит бюрера из Зова Припяти (Автор: demover123) if self.object:clsid()==clsid.burer_s then if not self.time_hit then self.time_hit = time_global() + 4000 end self.object:play_cycle("stand_tele_1", false) local particle_start = particles_object("anomaly2\\burer_shield_01") particle_start:play_at_pos(self.object:bone_position("bip01_head")) self.object.health = self.object.health + 0.1 if self.time_hit <= time_global() then if self.object:animation_count() > 0 then self.object:clear_animations() particle_start:stop() end end 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 ) return true end function generic_object_binder:net_destroy() 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 object_binder.net_destroy(self) end function generic_object_binder:reload(section) object_binder.reload(self, section) --printf("generic_object_binder:reload(): self.object:name()='%s'", self.object:name()) end function generic_object_binder:net_save_relevant() --printf("generic_object_binder:net_save_relevant(): self.object:name()='%s'", self.object:name()) 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") end xr_logic.load_obj(self.object, reader) if self.object:clsid() == clsid.script_trader then trade_manager.load(self.object, reader) end end Есть кто шарит в этом? Ссылка на комментарий
Змея 240 Опубликовано 20 Декабря 2018 Поделиться Опубликовано 20 Декабря 2018 @Dead_Land, не гони лошадей. Шарящих здесь много. А сколько желающих помочь - это другой вопрос. 2 1 Ссылка на комментарий
Купер 2 844 Опубликовано 22 Декабря 2018 Поделиться Опубликовано 22 Декабря 2018 @Змея, Скрытый текст - Видно, встал не с той ноги? - Не болтай, а помоги!(с) Хотя, да, модная нынче манера - "...дайте мне таблеток от жадности, побольше и желательно сразу...", несколько... м-мм... раздражает. @Dead_Land, "сварщик не настоящий"(с), но, как вариант, почитать здесь о методе set_nonscript_usable(bool) и где-то здесь Скрытый текст function generic_object_binder:death_callback(victim, who) ... -- victim:set_nonscript_usable(false) ... end применить на практике. p.s.: бли-и-ин, граммар-наци бесится: всё-таки "повИдение" через "е". 1 Ссылка на комментарий
Dead_Land 4 Опубликовано 22 Декабря 2018 Поделиться Опубликовано 22 Декабря 2018 4 часа назад, Купер сказал: @Змея, Показать - Видно, встал не с той ноги? - Не болтай, а помоги!(с) Хотя, да, модная нынче манера - "...дайте мне таблеток от жадности, побольше и желательно сразу...", несколько... м-мм... раздражает. @Dead_Land, "сварщик не настоящий"(с), но, как вариант, почитать здесь о методе set_nonscript_usable(bool) и где-то здесь Скрыть function generic_object_binder:death_callback(victim, who) ... -- victim:set_nonscript_usable(false) ... end применить на практике. p.s.: бли-и-ин, граммар-наци бесится: всё-таки "повИдение" через "е". -- victim:set_nonscript_usable(false) Вот я на него и думал щас попробую чёнить забабахать спасибо) Ссылка на комментарий
Dead_Land 4 Опубликовано 22 Декабря 2018 Поделиться Опубликовано 22 Декабря 2018 4 часа назад, Купер сказал: @Змея, Показать - Видно, встал не с той ноги? - Не болтай, а помоги!(с) Хотя, да, модная нынче манера - "...дайте мне таблеток от жадности, побольше и желательно сразу...", несколько... м-мм... раздражает. @Dead_Land, "сварщик не настоящий"(с), но, как вариант, почитать здесь о методе set_nonscript_usable(bool) и где-то здесь Скрыть function generic_object_binder:death_callback(victim, who) ... -- victim:set_nonscript_usable(false) ... end применить на практике. p.s.: бли-и-ин, граммар-наци бесится: всё-таки "повИдение" через "е". Вообщем-то я просто вырезал эту строчку зачем автор мода её туда вставил остается загадкой так как она вообще роли особой не играет но спасибо иду дальше мод пилить. P.S Ребят с АМК как вы в логике задали военным на насыпи координаты передвижения ? Ссылка на комментарий
Змея 240 Опубликовано 22 Декабря 2018 Поделиться Опубликовано 22 Декабря 2018 @Dead_Land Как-то так наверное... Ссылка на комментарий
den1s 57 Опубликовано 23 Декабря 2018 Поделиться Опубликовано 23 Декабря 2018 Если кто в курсе, подскажите, пожалуйста, по actor_stats ( конкретно интересует "stalkerkills" ) -- оно используется в ТЧ при каких-то движковых обсчётах или это просто "цыфирьки в пда для красоты"? В скриптах везде проверки идут вроде как по character_reputation(), добавил для теста 1000 очков в actor_stats "stalkerkills" -- character_reputation() не изменилась, хотя в пда "ранг" вырос до мастера. Хочется попробовать в "stalkerkills" писать вместо убитых Васей и Петей другую всякую-разную занимательную статистику, там в принципе везде можно задать xr_statistic.add_pts( "stalkerkills", my_stat, 1, 0 ) и добавится 0, кроме счётчика смертей ГГ - там нужно по-любому 1 очко добавлять, иначе не будет правильно обновляться в ПДА при загрузке сейва число смертей (использую наработку из аддона naxac и последующую синхронизацию с числом в ПДА при загрузке сохранения). По рангу единственное что нашёл, это в _g.script: function set_actor_rank(rank) if rank=="novice" then db.actor:set_character_rank(0) elseif rank=="stalker" then db.actor:set_character_rank(300) elseif rank=="veteran" then db.actor:set_character_rank(600) elseif rank=="master" then db.actor:set_character_rank(900) end end но в этот character_rank по идее можно и не добавлять ничего, изменив в xr_statistic условие if pts >= 1 then db.actor:set_character_rank( db.actor:character_rank() + pts ) end на if pts >= 1 and sect_name ~= my_sect then db.actor:set_character_rank( db.actor:character_rank() + pts ) end ( хотя конечно помереть 1000 раз и за это заработать ранг "мастер" - это в принципе даже справедливо. Там же не указано, мастер ЧЕГО ) Ссылка на комментарий
AndrewMor 527 Опубликовано 24 Декабря 2018 Поделиться Опубликовано 24 Декабря 2018 А кто знает, функция set_gravity в ТЧ работает, или в луа_хелп только ее описалово? В чистой игре и некоторых модах искал - не нашел конкретного примера... Сталкер - наше всё! Ссылка на комментарий
Charsi 440 Опубликовано 24 Декабря 2018 Поделиться Опубликовано 24 Декабря 2018 В ТЧ нет set_gravity даже в lua_help. Lua и LuaJIT плагины для Notepad++ SciTE-RU 3.5.5 плагины для MilkShape3D Ссылка на комментарий
macron 1 833 Опубликовано 24 Декабря 2018 Поделиться Опубликовано 24 Декабря 2018 1 час назад, AndrewMor сказал: А кто знает, функция set_gravity в ТЧ работает, или в луа_хелп только ее описалово? Только в xray extensions можно включить консольную ph_gravity. Или экспериментировать с аномалией типа "лифта". Я так "симулятор полета" делал. https://www.youtube.com/watch?v=HbZ9m3C2tsg Ссылка на комментарий
Dead_Land 4 Опубликовано 24 Декабря 2018 Поделиться Опубликовано 24 Декабря 2018 Ребят что это может значить? Expression : fatal error Function : CScriptEngine::lua_error File : E:\stalker\patch_1_0004\xr_3da\xrGame\script_engine.cpp Line : 73 Description : <no expression> Arguments : LUA error: ...yl way of death\gamedata\scripts\xr_motivator.script:409: attempt to call field 'on_npc_hit' (a nil value) Раньше не было мод кстати Interactive_Music_Mod ругает когда неписи начинают Pvp так сказать) Ссылка на комментарий
imcrazyhoudini 208 Опубликовано 24 Декабря 2018 Поделиться Опубликовано 24 Декабря 2018 @Dead_Land, мы совершенно не знаем, что ты делал. Возможно, твой мод на версию 1.0006, в следствии несовместимости вылетает. ищу человека, который смог бы заняться разработкой погоды на OGSR. кто может помочь - пишите в ЛС. Ссылка на комментарий
AndrewMor 527 Опубликовано 25 Декабря 2018 Поделиться Опубликовано 25 Декабря 2018 23 часа назад, macron сказал: Или экспериментировать с аномалией типа "лифта Я пробовал ее спавнить, но так и не понял, как она работает. То поднимает, то нет. Ощущение, что она недоделанная, одна такая на стадионе в Припяти была. Сталкер - наше всё! Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти