создаём папку gamedata,там создаём папку script.В этой папке создаём файл xr_motivator.script и в нём пишем:
--[[------------------------------------------------------------------------------------------------------------------ автор: mmp mod (Пенёк)
порядок вызова методов биндера: reload reinit load net_spawn --------------------------------------------------------------------------------------------------------------------]] memtsg = {} --' временная таблица lasthealth = 0 lastime = nil local bloodsuckers_restr = {} bloodsucker_zone_enter = {}
---------------------------------------------------------------------------------------------------------------------- class "motivator_binder" (object_binder)
function motivator_binder:extrapolate_callback(cur_pt) if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "extrapolate_callback") self.st.move_mgr:extrapolate_callback(self.object) end
if patrol(self.object:patrol()):flags(cur_pt):get() == 0 then return true end return false end
function motivator_binder:reinit() object_binder.reinit(self) --memusage.collect_info(self.object, "reinit_start") --printf("motivator_binder:reinit(): self.object:name()='%s'", self.object:name())
-- КОЛЛБЕКИ ЗДЕСЬ СТАВИТЬ НЕЛЬЗЯ! Здесь еще неизвестна активная схема. -- Ставьте коллбеки в методе update в отмеченном комментарием месте.
local char_ini = self.object:spawn_ini() or ini_file("scripts\\dummy.ltx")
--' Создание менеджера контроля положений тела --memusage.collect_info(self.object, "before_statemgr") self.st.state_mgr = state_mgr.bind_manager(self.object)
--memusage.collect_info(self.object, "after_statemgr") --memusage.collect_info(self.object, "reinit_end") end ---------------------------------------------------------------------------------------------------------------------- function motivator_binder:net_spawn(sobject) printf("motivator_binder:net_spawn(): self.object:name()='%s'", self.object:name()) local ppos = self.object:position() --printf("position [%s][%s][%s]", ppos.x, ppos.y, ppos.z) xrs_dyn_music.npc_table[self.object:id()] = self.object --memusage.collect_info(self.object, "netspawn_start") if not object_binder.net_spawn(self, sobject) then return false end
-- if self.object:spawn_ini():section_exist("dont_spawn_online") then -- printf("!!!OFFLINE") -- alife():object(self.object:id()).dont_spawn_online = true -- end
--' Загрузка историй для лагеря. if self.loaded == false then local char_ini = "" local spawn_ini = self.object:spawn_ini() local filename = nil if spawn_ini then filename = utils.cfg_get_string(spawn_ini, "logic", "cfg", self.object, false, "") printf("filename is [%s]", tostring(filename)) end if filename ~= nil then char_ini = ini_file(filename) else char_ini = self.object:spawn_ini() or ini_file("scripts\\dummy.ltx") end
printf("xr_info loaded!!!") xr_info.loadInfo(self.object, char_ini) end
if not self.object:alive() then return true end -- setting npc relation and sympathy from storage local relation = db.goodwill.relations and db.goodwill.relations[self.object:id()] if relation ~= nil and db.actor then game_relations.set_npcs_relation(self.object, db.actor, relation) end local sympathy = db.goodwill.sympathy and db.goodwill.sympathy[self.object:id()] if sympathy ~= nil then game_relations.set_npc_sympathy(self.object, sympathy) end game_relations.set_level_faction_community(self.object) db.add_enemy( self.object ) self.e_index = db.heli_enemy_count - 1
--' Для зомбированных чуваков говорим что аномалий не существует -- if self.object:character_community() == "zombied" then local manager = self.object:motivation_action_manager() manager:remove_evaluator (stalker_ids.property_anomaly) manager:add_evaluator (stalker_ids.property_anomaly, property_evaluator_const(false)) -- end
xr_smartcover.init_global_evaluators(self.object)
smart_terrain.setup_gulag_and_logic_on_spawn(self.object, self.st, sobject, modules.stype_stalker, self.loaded) --' грузим универсальную реакцию на болотную тварь bloodsucker_reaction.add_bloodsucker_reactions(self.object) --' грузим универсальную реакцию на актёра вышедшего из левелчейнджера actor_reaction.add_actor_reactions(self.object)
--' Универсальный тормоз на выход из комбата if self.object:character_community() ~= "zombied" then post_combat_idle.add_post_combat_idle(self.object) end
self.object:group_throw_time_interval(2000)
if self.object:profile_name() == "stc_strelok" then printf("strelok_health [true]") stc_strelok_health_manager.cs_strelok_health(self.object) end
return true end
function motivator_binder:net_destroy() --printf("motivator_binder:net_destroy(): self.object:name()='%s'", self.object:name()) xrs_dyn_music.npc_table[self.object:id()] = nil xrs_dyn_music.stop_combat(self.object:id()) xr_sound.stop_sounds_by_id(self.object:id()) local st = db.storage[self.object:id()] if st.active_scheme then xr_logic.issue_event(self.object, st[st.active_scheme], "net_destroy", self.object) end
db.del_obj(self.object)
db.storage[self.object:id()] = nil
self:clear_callbacks()
if self.e_index ~= nil then db.delete_enemy( self.e_index ) end if self.object:profile_name() == "stc_strelok" then stc_strelok_health_manager.remove_health_bar() end object_binder.net_destroy(self) end
function motivator_binder:clear_callbacks() self.object:set_patrol_extrapolate_callback(nil) self.object:set_callback(callback.hit, nil) self.object:set_callback(callback.death, nil) -- self.object:set_callback(callback.use_object, nil) end
function motivator_binder:hit_callback(obj, amount, local_direction, who, bone_index) callstack() -- FIXME: коллбеки неплохо было бы регистрировать в общем storage, а не посхемно... -- просто всегда ставить их при включении схемы и снимать при отключении. if obj:profile_name() == "stc_strelok" then stc_strelok_health_manager.hit_callback(obj, who, amount) end
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.combat_ignore then xr_logic.issue_event(self.object, self.st.combat_ignore, "hit_callback", obj, amount, local_direction, who, bone_index) end if self.st.combat then xr_logic.issue_event(self.object, self.st.combat, "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 amount > 0 then printf("HIT_CALLBACK: %s amount=%s bone=%s", obj:name(), amount, tostring(bone_index)) sr_territory.issue_event(self.object, "hit_callback", obj, amount, local_direction, who, bone_index) xr_wounded.hit_callback(self.object:id()) sim_combat.hit_callback(self.object:id(),who:id()) end end
function motivator_binder:death_callback(victim, who) --russian-stalker addon
--Динамические новости local m_post_message = "" local messages_none = { "Ты на пенёк сел должен был косарьб отдать ну а хули тут так мало ты уёбок??", "Сахаров, если это выброс, скинь мне касарь", "Количество выбросов неумолимо растёт", "Может это был суицид", "Давно такой хуйни не видел" }
local messages_kill = { "Ебаная сукааа.!", "Ебланом больше - ебланом меньше, хех!", "О! Сидрыч, хоть и не я убил его, но с тебя всё-равно причитается!", "Бармен, чё делать-то теперь? Ладно, пойду посмотрю на труп, вдруг на флешке инфа эта есть... Если чё, пиши в личку.", "Оба-на, ходил-то с такой-то пушкой, а отбиться не смог... Пойду прогуляюсь за его стволом... Если чё, то я ёе первый забил!", "Эх, собаке - собачья смерть.", "Шакальё совсем озверело, давно пора этих уродов в расход...", "Уроды! Мать их! Совсем страх потеряли!... ", "Ээээээ... Ну чё, братцы?! Кто со мной крыс этих мочить?!... ", "Да когда ж это кончится?!... ", "Твою мать! А я-то думал, что всех порешил...", "Мля, только вчера с ним виделись... Жаль пацана...", "Земля пухом! Хороший сталкер был... Пойду КПК подберу, мож хабар остался...", "Что с зоной происходит?... Раньше вот за хабаром ходили, боялись монстров и аномалий, а сейчас и брата сталкера опасаться приходится...", "Вояки новое оружие в Зону закинули. Вот бы достать...", "Видел военного в страном комбезе. Узнал только Сферу, броник чудной...", "Мне тут натрещали, что вояки БТР восстановили. Смотрите по сторонам...", "Что-то вертолеты разлетались. К дождю.. Хе-хе..", "Говорят, вояки приторговывают снарягой. Кто-нить, сходите, узнайте.", "Тут вояки где-то пулемет раскопали. Стреляют по воронам...", "Мужики, на кордон заход с болот неудобный, у поста вояк. Стерегитесь, идите ночью.", "За барахолкой мутантов полно. Кто хабар несет, осторожно.", "Черт, снорка дохлого видел. Его химера прикончила.", "Видел стаю кабанов. Откормились, блин, на радиоактивных харчах..", "Что-то зомбяки повылазили. Поосторожнее, пули их почти не берут.", "Блин, воронье разлеталось. Падаль где-то валяется, наверно. Стерегитесь.", "У, какие хряки тут бегают! Кому копытце принести?", "Блин, в болотах плоти бегают. Здоровые...", "Чьорт побери, контролер в Подземельях лютует, завалил бы кто", "Бюрера захерачил, упарился...", "У базы бандюков на свалке видел кровососа. А он меня нет.", "На Свалке снорки расплодились. Радиация их не берет, что ли.", "На Армейских Складах на болоте были замечены снорки, количество мне не уточнили. Не попадитесь.", "В Долине кошки бродят. Чудно.", "На складах Излома видел. Жуть.", "На Агропроме живности расплодилось... Подзаработать на отстреле можно.", "Псевдособака набросилась, еле пристрелил!", "Чуваки! Тут эта, зомбяки ходют! В долине...", "На Янтаре мертвые с акээмами стоятъ... И тишина...", "Пля, на снорка две обоймы извел. Прыгучий, гад...", "Мужики, кровососа тока картечь в бошку валит. На заметочку так...", "Ща такого хряка завалил! Копыта на десять кило!", "Уффф! кровососа захерачил...Весь взмок...", "Хе-хе, котяру поймал и хвост отхватил. Кому продать?!", "Мужики, в Болотах какой-то зеленой жгучей херни полно. Осторожно.", "Ну вот и ещё один конкурент в мир иной отошёл... Аминь!...", "А говорил - заговорённый!... хех!...", "Вот мля, а он мне денег должен!", "Что у него было при себе? Иль всё убийца выгреб?", "Такого человека погубили!!!", "Ну и поделом ему!!!", "Я недалеко! Могу помочь!", "Друга моего сволочи убили! Парни, вы не видели кто это сделал? Если видели, стукните в личку", "Одним 'стариком' меньше.", "Шрам, небойсь, прибил бедного.", "Жопой чую, не к добру это...", "Не засоряем канал! Ну помер мужик...не первый и не последний.", "Видал я этого. Давно надо было порешить.", "-1", "Сахаров сказал, что скоро может быть выброс. Но пока Зона не стабильна, он не знает наверняка.", "Кто на Янтаре - ОСТОРОЖНО! Видел большую кучу зомби...пошёл-ка я отсюда", "Фу-х! Слава Богу, что я с ним не пошёл сегодня на ходку. Вот чуяло моё сердце!", }
local messages_monster = { "Вояки новое оружие в Зону закинули. Вот бы достать...", "Видел военного в страном комбезе. Узнал только Сферу, броник чудной...", "Мне тут натрещали, что вояки БТР восстановили. Смотрите по сторонам...", "Что-то вертолеты разлетались. К дождю.. Хе-хе..", "Говорят, вояки приторговывают снарягой. Кто-нить, сходите, узнайте.", "Тут вояки где-то пулемет раскопали. Стреляют по воронам...", "Мужики, на кордон заход с болот неудобный, у поста вояк. Стерегитесь, идите ночью.", "За барахолкой мутантов полно. Кто хабар несет, осторожно.", "Черт, снорка дохлого видел. Его химера прикончила.", "Видел стаю кабанов. Откормились, блин, на радиоактивных харчах..", "Что-то зомбяки повылазили. Поосторожнее, пули их почти не берут.", "Блин, воронье разлеталось. Падаль где-то валяется, наверно. Стерегитесь.", "У, какие хряки тут бегают! Кому копытце принести?", "Блин, в болотах плоти бегают. Здоровые...", "Чьорт побьери, контролер в Подземельях лютует, завалил бы кто", "Бюрера захерачил, упарился...", "У базы бандюков на свалке видел кровососа. А он меня нет.", "На Свалке снорки расплодились. Радиация их не берет, что ли.", "На Армейских Складах на болоте были замечены снорки, количество мне не уточнили. Не попадитесь.", "В Долине кошки бродят. Чудно.", "На складах Излома видел. Жуть.", "На Агропроме живности расплодилось... Подзаработать на отстреле можно.", "Псевдособака набросилась, еле пристрелил!", "Чуваки! Тут эта, зомбяки ходют! В долине...", "На Янтаре мертвые с акээмами стоятъ... И тишина...", "Пля, на снорка две обоймы извел. Прыгучий, гад...", "Мужики, кровососа тока картечь в бошку валит. На заметочку так...", "Ща такого хряка завалил! Копыта на десять кило!", "Уффф! кровососа захерачил...Весь взмок...", "Хе-хе, котяру поймал и хвост отхватил. Кому продать?!", "Мужики, в Болотах какой-то зеленой жгучей херни полно. Осторожно.", "Ну говорил же я ему, что там твари эти шляются! Не послушал, и вот результат...", "Неудачник...", "Я пупею... Говорил, что безопасно там, безопасно... Хорошо что я отказался в последний момент с ним идти, а то бы, глядишь, рядом с ним полёг...", "Нда... Прогулялся за хабаром... Судьба...", "Что сказать?... Зона для сталкера не место для прогулки…", "Страшная смерть! Надеюсь не мучился брадяга...", "Вчера только там зачистку делали, тропку сделать надо было... Мля...", "Да говорил я всем уже - не ходить в то место, тварей не мерено!... Почему Че в сеть не скинул?...", "Хороший мужик был, рисковый, хабаром делился когда туго было, земля пухом, брат сталкер!", "Ещё один в зону попёрся, когда уже разуму наберутся?... Все же знают - не меньше чем по по двое ходить надо!...", "Разорвали бродягу!... Ну уж нет, я раньше пулю в голову себе пущу!...", "Таак... Где это он напоролся?... Надо срисовать координаты...", "Бьют тварей бьют, а их всё больше становится...", "Во живность плодится - сталкеру шагнуть негде!", "Животное, говорите, убило?", "Во молодёжи понаехало, уже монстра убить не могут...", "Стучите в личку! Пойдем на монстра.", "Я нашел труп! Никому бы не пожелал такой смерти.", "Монстр его на куски разорвал.", "Так ему и надо!", "Эх зона сколько жизней загубила..." , "Я тут по этому поводу анекдот вспомнил..." }
local m_game_vertex = who:game_vertex_id() local lvert = game_graph():vertex(m_game_vertex) local lid = lvert:level_id() local mlevel = alife():level_name(lid) local m_s_level = mlevel
local victim_name = victim:character_name()
local killer_name = who:character_name()
local victim_comm = victim:character_community()
local killer_comm = who:character_community()
local post_message_prob = 0.8
if killer_comm=="monster" then local m_clsid = get_clsid(who) killer_name = monster_classes[m_clsid] if math.random() < post_message_prob then m_post_message = messages_monster[math.random(table.getn(messages_monster))] end end
if killer_comm~="monster" then if math.random() < post_message_prob then m_post_message = messages_kill[math.random(table.getn(messages_kill))] end end
if killer_name==victim_name then killer_name="Выброс" killer_comm="monster" if math.random() < post_message_prob then m_post_message = messages_none[math.random(table.getn(messages_none))] end end
if killer_comm~=nil then local m_text_kill_string=victim_name.." "..game.translate_string(victim_comm)..". "..game.translate_string(m_s_level) local news_text = "%c[255,255,160,0]".."Погиб Сталкер:".."\\n".."%c[default]"..m_text_kill_string local news_caption = game.translate_string("st_tip") local texture = "ui_iconsTotal_weapons"
if (m_post_message ~= "") then local fname = fnames[math.random(table.getn(fnames))] local sname = snames[math.random(table.getn(snames))] local from = fname.." "..sname local news_text = "%c[255,160,160,160]"..from.."\\n".."%c[default]"..m_post_message db.actor:give_game_news(news_caption, news_text, "ui_iconsNpc_stalker_neytral_balon_6",25*1000, 15*1000) end end --end
callstack() --' Distemper 03.2008 -- xrs_dyn_music.stop_combat(self.object:id()) --' Если игрок был с квестом от механика - фейлить его local tm = task_manager.get_task_manager() local inited_find_upgrade_tasks = tm.inited_find_upgrade_tasks if inited_find_upgrade_tasks and inited_find_upgrade_tasks[self.object:id()] then for k,v in pairs(inited_find_upgrade_tasks[self.object:id()]) do printf("failing task %s status %s", tostring(v.id), tostring(v.status) ) if v.status == "selected" then v.last_check_task = "fail" end end end local st = db.storage[self.object:id()] local npc = self.object stalker_generic.remove_level_spot(npc, st) --' end -- if who:id() == db.actor:id() then xr_statistic.addKillCount(self.object) xr_statistic.inc_killed_stalkers_counter() end
--' Загрузка историй для лагеря. local known_info = utils.cfg_get_string(st.ini,st.section_logic , "known_info", self.object, false, "", nil) printf("xr_info from death loaded!!!") xr_info.loadInfo(self.object, st.ini, known_info)
if self.st.death then xr_logic.issue_event(self.object, self.st.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 sr_territory.issue_event(self.object, "death_callback", victim, who)
self:clear_callbacks() -- Отключаем реакцию на кровососа bloodsucker_reaction.disable_bloodsucker_reaction(self.object) --' Наносим небольшой импульс вперед. if(actor_stats.remove_from_ranking~=nil)then local community = self.object:character_community() if community == "zombied" or community == "monolith" or community == "arena_enemy" then else actor_stats.remove_from_ranking(self.object:id()) end
end release_body_manager.get_release_body_manager():moving_dead_body(self.object) --' Distemper 11.02.2008 end
function motivator_binder:use_callback(obj, who) printf("motivator_binder:use_callback(obj, who)") if self.object:alive() then inventory_upgrades.need_victim(obj) --' Distemper 03.2008 xr_use.notify_on_use(obj, who) if self.st.active_section then xr_logic.issue_event(self.object, self.st[self.st.active_scheme], "use_callback", obj, who) end else if self.treasure_processed == false then printf("treasure_manager.use(self.object)") treasure_manager.use(self.object) self.treasure_processed = true end end end
function motivator_binder:update(delta) object_binder.update(self, delta) if bind_stalker.to_delayed_alife_release_objects[self.object:id()] == true then printf("releasing object ["..self.object:name().."]") alife():release(alife():object(self.object:id()),true) return end
local object_alive = self.object:alive() local object = self.object local actor = db.actor local st = db.storage[object:id()] local st_combat = st.combat if not self.strelok_particles_added and object:profile_name() == "stc_strelok" then object:start_particles("monsters\\polter_idle","bip01_head") self.strelok_particles_added = true end if st ~= nil and st.active_scheme ~= nil and object_alive then -- Обрабатываем Override on_combat local switched = false local manager = object:motivation_action_manager() if manager:initialized() and manager:current_action_id() == stalker_ids.action_combat_planner then local overrides = xr_logic.generic_scheme_overrides(object) if overrides then if overrides.on_combat then xr_logic.pick_section_from_condlist(actor, object, overrides.on_combat.condlist) end
if st_combat and st_combat.logic and not xr_logic.try_switch_to_another_section(object, st_combat, actor) then if overrides.combat_type then set_combat_type(object, actor, overrides) end else switched = true end
else set_combat_type(object, actor, st_combat) end end
if not switched then xr_logic.try_switch_to_another_section(object, st[st.active_scheme], actor) end else -- если нет активной секции, то тип боя взять из секции on_combat xr_combat.set_combat_type(object, actor, st_combat) end
if self.first_update == false then if object_alive == false then death_manager.drop_manager(object):create_release_item() end self.first_update = true end if time_global() - self.last_update > 1000 then sr_light.check_light(object) self.last_update = time_global() end
--' проверка, не находится ли сталкер в одном из sr_bloodsucker for k,v in pairs(bloodsuckers_restr) do if v:inside(object:position()) and object:alive() then if bloodsucker_zone_enter[k] == nil then -- printf("ZONE ENTERED") bloodsucker_zone_enter[k] = object end else if bloodsucker_zone_enter[k] ~= nil then -- printf("ZONE ENTERED") bloodsucker_zone_enter[k] = nil end end end
--' Выбираем активный сектор для НПС self.st.active_sector = sr_danger.select_active_sectors(object)
--' Апдейт менеджера состояний тела if self.st.state_mgr then if object_alive then self.st.state_mgr:update() -- Апдейт торговли if self.st.state_mgr.combat == false and self.st.state_mgr.alife == false then trade_manager.update(object) end else self.st.state_mgr = nil end end
--' Апдейт саундменеджера if object_alive then xr_sound.update(object:id()) end
-- Апдейт отряда local squad = db.storage[self.object:id()].squad_obj if squad ~= nil then if squad.commander_id == self.object:id() then squad:update() end end
--[[ object:info_clear() if object_alive then local active_section = db.storage[object:id()].active_section if active_section then object:info_add("section: " .. active_section) end local best_enemy = object:best_enemy() if best_enemy then object:info_add("enemy: " .. best_enemy:name()) end object:info_add(object:name().." ["..object:team().."]["..object:squad().."]["..object:group().."]")
if alife():object(object:id()) == nil then return end
local squad = db.storage[object:id()].squad_obj if squad ~= nil then object:info_add("squad_id: " .. squad.squad_id) if squad.sim_combat_id ~= nil then local smart = sim_board.get_sim_board().smarts[squad.sim_combat_id].smrt local sim_combat = smart.combat_manager object:info_add("sim_combat: stage[" .. sim_combat:get_squad_stage(squad).."]") end end
if object:is_talk_enabled() then object:set_tip_text("character_use") else object:set_tip_text("") end else object:set_tip_text_default() end ]] end
function motivator_binder:reload(section) --memusage.collect_info(self.object, "reload_start") object_binder.reload(self, section) --printf("motivator_binder:reload(): self.object:name()='%s'", self.object:name()) --self.object:set_pda_callback(pda_callback) --memusage.collect_info(self.object, "reload_end") end
function motivator_binder:net_save_relevant() --printf("motivator_binder:net_save_relevant(): self.object:name()='%s'", self.object:name()) return true end
function motivator_binder:save(packet) set_save_marker(packet, "save", false, "motivator_binder")
object_binder.save(self, packet) if self.object:profile_name() == "stc_strelok" then stc_strelok_health_manager.save(packet) end packet:w_bool(self.treasure_processed)
function motivator_binder:hear_callback(self, who, sound_type, sound_position, sound_power) if who:id() == self:id() then return end local type = "NIL" if bit_and(sound_type, snd_type.weapon) == snd_type.weapon then type = "WPN" if bit_and(sound_type, snd_type.weapon_shoot) == snd_type.weapon_shoot then type = "WPN_shoot" elseif bit_and(sound_type, snd_type.weapon_empty) == snd_type.weapon_empty then type = "WPN_empty" elseif bit_and(sound_type, snd_type.weapon_bullet_hit) == snd_type.weapon_bullet_hit then type = "WPN_hit" elseif bit_and(sound_type, snd_type.weapon_reload) == snd_type.weapon_reload then type = "WPN_reload" end elseif bit_and(sound_type, snd_type.item) == snd_type.item then type = "ITM" if bit_and(sound_type, snd_type.item_pick_up) == snd_type.item_pick_up then type = "ITM_pckup" elseif bit_and(sound_type, snd_type.item_drop) == snd_type.item_drop then type = "ITM_drop" elseif bit_and(sound_type, snd_type.item_hide) == snd_type.item_hide then type = "ITM_hide" elseif bit_and(sound_type, snd_type.item_take) == snd_type.item_take then type = "ITM_take" elseif bit_and(sound_type, snd_type.item_use) == snd_type.item_use then type = "ITM_use" end elseif bit_and(sound_type, snd_type.monster) == snd_type.monster then type = "MST" if bit_and(sound_type, snd_type.monster_die) == snd_type.monster_die then type = "MST_die" elseif bit_and(sound_type, snd_type.monster_injure) == snd_type.monster_injure then type = "MST_damage" elseif bit_and(sound_type, snd_type.monster_step) == snd_type.monster_step then type = "MST_step" elseif bit_and(sound_type, snd_type.monster_talk) == snd_type.monster_talk then type = "MST_talk" elseif bit_and(sound_type, snd_type.monster_attack) == snd_type.monster_attack then type = "MST_attack" elseif bit_and(sound_type, snd_type.monster_eat) == snd_type.monster_eat then type = "MST_eat" end end if type ~= "NIL" then printf("SND *%s* dist: %d [%f], %s -> %s", type, self:position():distance_to(who:position()), sound_power, who:name(), self:name()) end end
function AddToMotivator(npc) if alife() then npc:bind_object(this.motivator_binder(npc)) end end
-- Эвалюаторы, которые имеют высший приоритет, и, соответственно, перебивают остальные скрипты собой function addCommonPrecondition(action) --action:add_precondition (world_property(xr_evaluators_id.reaction,false)) action:add_precondition (world_property(xr_evaluators_id.stohe_meet_base + 1,false)) action:add_precondition (world_property(xr_evaluators_id.sidor_wounded_base + 0, false)) --'action:add_precondition (world_property(xr_evaluators_id.chugai_heli_hunter_base, false)) action:add_precondition (world_property(xr_evaluators_id.abuse_base, false))
end function register_bloodsucker_restr(obj) printf("registering blood restr!!!") bloodsuckers_restr[obj:id()] = obj end
слушай,ПОСЛЕ ЭТОЙ ФРАЗЫ создаём папку gamedata,там создаём папку script.В этой папке создаём файл xr_motivator.script и в нём пишем: тупо всё копировать и вставлять в папку,да? у меня есть папка гэймдайта,в которой мод лежит,в ней папку эту создавать и туда это всё кидать...попрёт?
значит, по порядку: календари - ВОТ, вот какие календари я давненько хотел увидеть на просторах портала. SZMCOP - ждем обязательно. трейлер фильма - неплохо, надо глянуть. по "Новому Союзу"...