alexwew 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 Whisper смотри тему: Создание квестов, там все для тех кто на бронепоезде описано. я изменился. пью, курю, употребляя наркотические средства. Жизнь-говно. Бабы -консервы. Забьюсь под стол, чтоб никто не трогал. Ссылка на комментарий
straj 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 Larry76, теперь есть, но он всё равно кудато идёт. И ещё вопрос: Дело в том, что мой Страж не хочет со мной базарить (ссылается на какогото бугра, которому надо по ушам катать, говорить что его не казённые!). Где ему надо править, чтобы они были казёнными? Ссылка на комментарий
alexwew 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 (изменено) strai вот так попробуй ---------------------------------------------------------------------------------------------------------------------- -- Схема встречи двух сталкеров -- автор: Диденко Руслан (Stohe) -- переработано: Рыженков Алексей(_Zero_cooL_) -- TODO: ---------------------------------------------------------------------------------------------------------------------- --------------------------------------------------------------------------------------------------------------------- --Evaluators ---------------------------------------------------------------------------------------------------------------------- --' Возвращает есть ли у нас контакт с другим сталкером class "evaluator_contact" (property_evaluator) function evaluator_contact:__init(name, storage) super (nil, name) self.a = storage end function evaluator_contact:evaluate() if self.a.meet_set ~= true then return false end -- if self.a.meet_only_at_path == true and not db.storage[self.object:id()].move_mgr:arrived_to_first_waypoint() then -- return false -- end if db.actor then if not db.actor:alive() then return false end self.a.meet_manager:update() if xr_wounded.is_wounded(self.object) then return false end if self.object:best_enemy() ~= nil then return false end if self.mgr == nil then self.mgr = self.object:motivation_action_manager() end if self.mgr:evaluator(stalker_ids.property_enemy):evaluate() then self.a.meet_manager.use = "false" self.object:disable_talk() return false end return self.a.meet_manager.current_distance ~= nil else return false end end ---------------------------------------------------------------------------------------------------------------------- --Actions ---------------------------------------------------------------------------------------------------------------------- --' Приглашение к тороговле class "action_meet_wait" (action_base) function action_meet_wait:__init (npc_name,action_name, storage, char_ini) super (nil, action_name) self.char_ini = char_ini self.a = storage end function action_meet_wait:initialize() action_base.initialize(self) self.object:set_desired_position() self.object:set_desired_direction() end function action_meet_wait:execute () action_base.execute(self) self.a.meet_manager:update_state() end function action_meet_wait:finalize () action_base.finalize(self) end -- Функционал --[[ -- звук на юзание CB ]] class "Cmeet_manager" function Cmeet_manager:__init(npc, storage) self.npc = npc self.a = storage self.startdialog = nil self.abuse_mode = nil self.trade_enable = nil self.use = nil self.allow_break = nil self.npc_is_camp_director = false self.curent_distance = nil -- nil - мит не активен, close - близко, far - далеко self.hello_passed = false -- Говорили ли мы привет self.bye_passed = false -- Говорили ли мы пока end function Cmeet_manager:update_state() local state = nil local victim = nil if self.current_distance == "close" then -- анимация, пока в близком радиусе state = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_anim) -- направление, пока в близком радиусе victim = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_victim) elseif self.current_distance == "far" then -- анимация, пока в дальнем радиусе state = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_anim) -- направление, пока в близком радиусе victim = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_victim) end if tostring(victim) ~= "nil" then local sim = alife() if sim then victim = get_story_object(victim) end else victim = nil end if tostring(state) ~= "nil" then if victim == nil then state_mgr.set_state(self.npc, state, nil, nil, nil) else state_mgr.set_state(self.npc, state, nil, nil, {look_object = victim}) end end local snd = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_snd) -- звук, пока в дальнем радиусе (отыгрывается, даже если мы в ближнем) if tostring(snd) ~= "nil" then xr_sound.set_sound_play(self.npc:id(), snd) end end function Cmeet_manager:set_start_distance() if db.actor == nil then self.hello_passed = false self.bye_passed = false self.current_distance = nil return end if not self.npc:alive() then self.hello_passed = false self.bye_passed = false self.current_distance = nil return end -- Определение, в каком радиусе находимся local distance = self.npc:position():distance_to(db.actor:position()) local actor_visible = self.npc:see(db.actor) local is_object_far = actor_visible and distance <= tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_distance)) local is_object_close = (actor_visible and distance <= tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_distance))) or self.npc:is_talking() if is_object_close == true then self.hello_passed = true self.current_distance = "close" elseif is_object_far == true then self.bye_passed = true self.current_distance = "far" elseif distance > self.a.reset_distance then self.hello_passed = false self.bye_passed = false self.current_distance = nil else self.current_distance = nil end end function Cmeet_manager:update() -- Определение, в каком радиусе находимся local distance = self.npc:position():distance_to(db.actor:position()) local actor_visible = self.npc:see(db.actor) if actor_visible then --printf("%s check distance %s <= %s <= %s", self.npc:name(), distance, tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_snd_distance)), tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_snd_distance)) ) if distance <= tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_snd_distance)) then -- Коллбек на приближение -- звук при приближении if self.hello_passed == false then local snd = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_snd_hello) if tostring(snd) ~= "nil" and not state_mgr.is_npc_in_combat(self.npc) then xr_sound.set_sound_play(self.npc:id(), snd) end self.hello_passed = true end elseif distance <= tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_snd_distance)) then if self.hello_passed == true then -- Коллбек на отдаление -- звук при отдалении if self.bye_passed == false then local snd = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_snd_bye) if tostring(snd) ~= "nil" and not state_mgr.is_npc_in_combat(self.npc) then xr_sound.set_sound_play(self.npc:id(), snd) end self.bye_passed = true end end end end local is_object_far = actor_visible and distance <= tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.far_distance)) local is_object_close = (actor_visible and distance <= tonumber(xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_distance))) or (self.npc:is_talking() and self.a.meet_on_talking) --printf("!!! %s %s %s", self.npc:name(), tostring(is_object_far), tostring(is_object_close)) --printf("%s", xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.close_distance)) if is_object_close == true then if self.current_distance ~= "close" then self.current_distance = "close" end elseif is_object_far == true then self.current_distance = "far" elseif distance > self.a.reset_distance then -- ресет флажков при выходе в дальний радиус CB self.hello_passed = false self.bye_passed = false self.current_distance = nil else self.current_distance = nil end -- Можно или нет оборвать диалог local allow_break = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.allow_break) if self.allow_break ~= (allow_break == "true") then self.allow_break = (allow_break == "true") end -- стартовый диалог if self.a.meet_dialog ~= nil then local start_dialog = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.meet_dialog) if self.startdialog ~= start_dialog then self.startdialog = start_dialog --printf("*DIALOGS %s* SET [%s]", self.npc:name(), tostring(start_dialog)) if start_dialog == nil or start_dialog == "nil" then -- восстановление начального --printf("RESTORE") self.npc:restore_default_start_dialog() else --printf("SET %s allow_break %s", start_dialog, tostring(self.allow_break)) -- установка нового self.npc:set_start_dialog(start_dialog) if self.npc:is_talking() then db.actor:run_talk_dialog(self.npc, not(self.allow_break)) end end end end local is_talking = self.npc:is_talking() local use = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.use) -- Проверяем, играем ли мы что то в кампе if self.npc_is_camp_director == true then use = "false" end --printf("%s self.use[%s] use [%s]", self.npc:name(), tostring(self.use), tostring(use)) --print_table(self.a.use) -- доступность юзания if self.use ~= use then if use == "self" then if not is_talking and device().precache_frame < 1 then self.npc:enable_talk() --printf("SET allow_break %s", tostring(self.allow_break)) self.npc:allow_break_talk_dialog(self.allow_break) db.actor:run_talk_dialog(self.npc, not(self.allow_break)) end end if device().precache_frame < 1 then self.use = use end end local use_text = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.use_text) if use_text ~= "nil" then self.npc:set_tip_text(use_text) else if self.npc:is_talk_enabled() then self.npc:set_tip_text("character_use") else self.npc:set_tip_text("") end end self.npc:allow_break_talk_dialog(self.allow_break) --[[ if is_talking then db.actor:allow_break_talk_dialog(self.allow_break) end ]] -- Проверяем включать ли обижание на заюзывание local abuse = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.abuse) if self.abuse_mode ~= abuse then if abuse == "true" then xr_abuse.enable_abuse(self.npc) else xr_abuse.disable_abuse(self.npc) end self.abuse_mode = abuse end -- доступность торговли if xr_wounded.is_wounded(self.npc) then self.trade_enable = false else local trade_enable = xr_logic.pick_section_from_condlist(db.actor, self.npc, self.a.trade_enable) --printf("npc [%s] self %s *** %s", self.npc:name(), tostring(self.trade_enable), tostring(trade_enable)) if self.trade_enable ~= trade_enable then if trade_enable == "true" then self.npc:enable_trade() else self.npc:disable_trade() end self.trade_enable = trade_enable end end end function notify_on_use(victim, who) --printf("NOTIFY [%s] used by [%s]", victim:name(), who:name()) -- Если мы мертвы - на юзание не реагировать if not victim:alive() then return end local st = db.storage[victim:id()].meet if st == nil then return end local snd = xr_logic.pick_section_from_condlist(db.actor, victim, st.snd_on_use) if tostring(snd) ~= "nil" then xr_sound.set_sound_play(victim:id(), snd) end local meet_manager = st.meet_manager if meet_manager.use == "false" and meet_manager.abuse_mode == "true" and game_relations.get_npcs_relation(victim, db.actor) == game_object.friend then xr_abuse.add_abuse(victim, 1) end end ---------------------------------------------------------------------------------------------------------------------- -- binder ---------------------------------------------------------------------------------------------------------------------- function add_to_binder(object, char_ini, scheme, section, st) local operators = {} local properties = {} local manager = object:motivation_action_manager() properties["contact"] = xr_evaluators_id.stohe_meet_base + 1 properties["wounded"] = xr_evaluators_id.sidor_wounded_base properties["abuse"] = xr_evaluators_id.abuse_base properties["wounded_exist"] = xr_evaluators_id.wounded_exist properties["corpse_exist"] = xr_evaluators_id.corpse_exist operators["contact"] = xr_actions_id.stohe_meet_base + 1 operators["state_mgr_to_idle_alife"] = xr_actions_id.state_mgr + 2 -- Evaluators manager:add_evaluator (properties["contact"], evaluator_contact("meet_contact", st)) -- Actions local action = action_meet_wait (object:name(),"action_process_meet", st, char_ini) action:add_precondition (world_property(stalker_ids.property_alive, true)) action:add_precondition (world_property(stalker_ids.property_enemy, false)) action:add_precondition (world_property(stalker_ids.property_danger,false)) action:add_precondition (world_property(stalker_ids.property_anomaly,false)) action:add_precondition (world_property(stalker_ids.property_items, false)) action:add_precondition (world_property(properties["wounded_exist"],false)) action:add_precondition (world_property(properties["corpse_exist"], false)) action:add_precondition (world_property(properties["contact"], true)) action:add_precondition (world_property(properties["wounded"], false)) action:add_precondition (world_property(properties["abuse"], false)) action:add_effect (world_property(properties["contact"], false)) manager:add_action (operators["contact"], action) action = manager:action (xr_actions_id.alife) action:add_precondition (world_property(properties["contact"], false)) action = manager:action (operators["state_mgr_to_idle_alife"]) action:add_precondition (world_property(properties["contact"], false)) st.meet_manager = Cmeet_manager(object, st) xr_logic.subscribe_action_for_events(object, st, st.meet_manager) end ------------ -- Вызывается только в начале на чтении логики, создает экшены, эвалуаторы и производит -- первичную настройку. function set_meet(npc, ini, scheme, section) local st = xr_logic.assign_storage_and_bind(npc, ini, scheme, section) end -- Вызывается на переключении на новую секцию. Производит вычитывание настроек из текущей секции. function reset_meet(npc, scheme, st, section) local meet_section -- printf("[%s]", utils.to_str(st.section_logic)) if scheme == nil or scheme == "nil" then meet_section = utils.cfg_get_string(st.ini, st.section_logic, "meet", npc, false, "") else meet_section = utils.cfg_get_string(st.ini, section, "meet", npc, false, "") end init_meet(npc, st.ini, meet_section, st.meet, scheme) end -- Функция чтения настроек. В нее передается секция, откуда их нужно читать. function init_meet(npc, ini, section, st, scheme) --printf("MEET SECTION [%s][%s][%s]", tostring(st.meet_section), tostring(section), tostring(scheme)) if tostring(section) == st.meet_section and tostring(section) ~= "nil" then return end st.meet_section = utils.tostring(section) -- Что можно настраивать в meet --[[ [meet] close_distance = {=actor_has_weapon} 3, 3 close_anim = {=actor_has_weapon} a, b close_snd_hello = {=actor_has_weapon} a, b close_snd_bye = {=actor_has_weapon} a, b close_victim = {=actor_has_weapon} a, b far_distance = {=actor_has_weapon} 30, 30 far_anim = {=actor_has_weapon} a, b far_snd = {=actor_has_weapon} a, b far_victim = {=actor_has_weapon} a, b snd_on_use = {=in_battle} a, {=no_talk} b, c use = {=actor_has_weapon} true, false -- self - юзает сам meet_dialog = {=actor_has_weapon} a abuse = {=in_battle} true, false trade_enable = {=in_battle} true, false allow_break = {=in_battle} true, false Ненастраиваемые параметры: reset_distance = 30 ]] -- Устанавливаем дефолты local def = {} local relation = game_relations.get_npcs_relation(npc, db.actor) if relation == game_object.enemy then def.close_distance = "0" def.close_anim = "nil" def.close_snd_distance = "0" def.close_snd_hello = "nil" def.close_snd_bye = "nil" def.close_victim = "nil" def.far_distance = "0" def.far_anim = "nil" def.far_snd_distance = "0" def.far_snd = "nil" def.far_victim = "nil" def.snd_on_use = "nil" def.use = "false" def.meet_dialog = "nil" def.abuse = "false" def.trade_enable = "true" def.allow_break = "true" def.meet_on_talking = "false" def.use_text = "nil" else def.close_distance = "{=is_wounded} 0, 3" def.close_anim = "{=is_wounded} nil, {=actor_has_weapon} threat_na, talk_default" def.close_snd_distance = "{=is_wounded} 0, 3" def.close_snd_hello = "{=is_wounded} nil, {=actor_enemy} nil, {=actor_has_weapon} meet_hide_weapon, meet_hello" def.close_snd_bye = "{=is_wounded} nil, {=actor_enemy} nil, {=actor_has_weapon} nil, meet_hello" def.close_victim = "{=is_wounded} nil, actor" def.far_distance = "{=is_wounded} 0, 5" def.far_anim = "nil" def.far_snd_distance = "{=is_wounded} 0, 5" def.far_snd = "nil" def.far_victim = "nil" def.snd_on_use = "{=is_wounded} nil, {=actor_enemy} nil, {=has_enemy} meet_use_no_fight, {=actor_has_weapon} meet_use_no_weapon, {!dist_to_actor_le(3)} nil" def.use = "{=is_wounded} false, {=actor_enemy} false, {=has_enemy} false, {=actor_has_weapon} false, {=dist_to_actor_le(3)} true, false" def.meet_dialog = "nil" def.abuse = "{=has_enemy} false, true" def.trade_enable = "true" def.allow_break = "true" def.meet_on_talking = "true" def.use_text = "nil" end if tostring(section) == "no_meet" then st.close_distance = xr_logic.parse_condlist(npc, section, "close_distance", "0") st.close_anim = xr_logic.parse_condlist(npc, section, "close_anim", "nil") st.close_snd_distance=xr_logic.parse_condlist(npc, section, "close_distance", "0") st.close_snd_hello = xr_logic.parse_condlist(npc, section, "close_snd_hello", "nil") st.close_snd_bye = xr_logic.parse_condlist(npc, section, "close_snd_bye", "nil") st.close_victim = xr_logic.parse_condlist(npc, section, "close_victim", "nil") st.far_distance = xr_logic.parse_condlist(npc, section, "far_distance", "0") st.far_anim = xr_logic.parse_condlist(npc, section, "far_anim", "nil") st.far_snd_distance = xr_logic.parse_condlist(npc, section, "far_distance", "0") st.far_snd = xr_logic.parse_condlist(npc, section, "far_snd", "nil") st.far_victim = xr_logic.parse_condlist(npc, section, "far_victim", "nil") st.snd_on_use = xr_logic.parse_condlist(npc, section, "snd_on_use", "nil") st.use = xr_logic.parse_condlist(npc, section, "use", "false") st.meet_dialog = xr_logic.parse_condlist(npc, section, "meet_dialog", "nil") st.abuse = xr_logic.parse_condlist(npc, section, "abuse", "false") st.trade_enable = xr_logic.parse_condlist(npc, section, "trade_enable", "true") st.allow_break = xr_logic.parse_condlist(npc, section, "allow_break", "true") st.meet_on_talking = xr_logic.parse_condlist(npc, section, "meet_on_talking", "false") st.use_text = xr_logic.parse_condlist(npc, section, "use_text", "nil") st.reset_distance = 30 st.meet_only_at_path = true else st.close_distance = xr_logic.parse_condlist(npc, section, "close_distance", utils.cfg_get_string(ini, section, "close_distance", npc, false, "", def.close_distance)) st.close_anim = xr_logic.parse_condlist(npc, section, "close_anim", utils.cfg_get_string(ini, section, "close_anim", npc, false, "", def.close_anim)) st.close_snd_distance=xr_logic.parse_condlist(npc, section, "close_snd_distance", utils.cfg_get_string(ini, section, "close_snd_distance", npc, false, "",def.close_distance)) st.close_snd_hello = xr_logic.parse_condlist(npc, section, "close_snd_hello", utils.cfg_get_string(ini, section, "close_snd_hello", npc, false, "", def.close_snd_hello)) st.close_snd_bye = xr_logic.parse_condlist(npc, section, "close_snd_bye", utils.cfg_get_string(ini, section, "close_snd_bye", npc, false, "", def.close_snd_bye)) st.close_victim = xr_logic.parse_condlist(npc, section, "close_victim", utils.cfg_get_string(ini, section, "close_victim", npc, false, "", def.close_victim)) st.far_distance = xr_logic.parse_condlist(npc, section, "far_distance", utils.cfg_get_string(ini, section, "far_distance", npc, false, "", def.far_distance)) st.far_anim = xr_logic.parse_condlist(npc, section, "far_anim", utils.cfg_get_string(ini, section, "far_anim", npc, false, "", def.far_anim)) st.far_snd_distance = xr_logic.parse_condlist(npc, section, "far_snd_distance", utils.cfg_get_string(ini, section, "far_snd_distance", npc, false, "", def.far_snd_distance)) st.far_snd = xr_logic.parse_condlist(npc, section, "far_snd", utils.cfg_get_string(ini, section, "far_snd", npc, false, "", def.far_snd)) st.far_victim = xr_logic.parse_condlist(npc, section, "far_victim", utils.cfg_get_string(ini, section, "far_victim", npc, false, "", def.far_victim)) st.snd_on_use = xr_logic.parse_condlist(npc, section, "snd_on_use", utils.cfg_get_string(ini, section, "snd_on_use", npc, false, "", def.snd_on_use)) st.use = xr_logic.parse_condlist(npc, section, "use", utils.cfg_get_string(ini, section, "use", npc, false, "", def.use)) st.meet_dialog = xr_logic.parse_condlist(npc, section, "meet_dialog", utils.cfg_get_string(ini, section, "meet_dialog", npc, false, "", def.meet_dialog)) st.abuse = xr_logic.parse_condlist(npc, section, "abuse", utils.cfg_get_string(ini, section, "abuse", npc, false, "", def.abuse)) st.trade_enable = xr_logic.parse_condlist(npc, section, "trade_enable", utils.cfg_get_string(ini, section, "trade_enable", npc, false, "", def.trade_enable)) st.allow_break = xr_logic.parse_condlist(npc, section, "allow_break", utils.cfg_get_string(ini, section, "allow_break", npc, false, "", def.allow_break)) st.meet_on_talking = xr_logic.parse_condlist(npc, section, "meet_on_talking", utils.cfg_get_string(ini, section, "meet_on_talking", npc, false, "", def.meet_on_talking)) st.use_text = xr_logic.parse_condlist(npc, section, "use_text", utils.cfg_get_string(ini, section, "use_text", npc, false, "", def.use_text)) st.reset_distance = 30 st.meet_only_at_path = true end st.meet_manager:set_start_distance() --print_table(st.far_distance) -- флажок, что функция хотя бы раз вызывалась st.meet_set = true end function disable_scheme(npc, scheme) db.storage[npc:id()].actor_dialogs = nil db.storage[npc:id()].actor_disable = nil end --- Находится ли чувак в данный момент в состоянии мита function is_meet(npc) local manager = npc:motivation_action_manager() if manager and manager:initialized() then local id = manager:current_action_id() if id == xr_actions_id.stohe_meet_base + 1 then return true end end return false end function process_npc_usability(npc) if xr_wounded.is_wounded(npc) then if npc:relation(db.actor) == game_object.enemy then npc:disable_talk() else local wounded = db.storage[npc:id()].wounded if wounded.enable_talk then npc:enable_talk() else npc:disable_talk() end end return end local meet = db.storage[npc:id()].meet local use = meet.meet_manager.use if use == "true" then if xr_corpse_detection.is_under_corpse_detection(npc) or xr_help_wounded.is_under_help_wounded(npc) then npc:disable_talk() else npc:enable_talk() end elseif use == "false" then npc:disable_talk() if npc:is_talking() then npc:stop_talk() end end end это файл xr_meet.script замени его и тогда с тобой все сталкеры говорить будут. есть и другой вариант. Ася в профиле, если что стучись Изменено 31 Мая 2010 пользователем alexwew я изменился. пью, курю, употребляя наркотические средства. Жизнь-говно. Бабы -консервы. Забьюсь под стол, чтоб никто не трогал. Ссылка на комментарий
straj 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 Нет, не идёт. Вылетает при загрузки или начале НИ с пустым логом! Чё за 3 вариант? Ссылка на комментарий
alexwew 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 Та инструкция по которой ты спавнишь нпц для тч-а там можно говорить с кем угодно. В зп же можно говорить только с начальником сквада. так вот тебе просто нужно создать сквад из одного твоего нпц и он говорить точно будет с тобой. Посмотри страницы 2-3 назад я описывал в подробностях как делать. я изменился. пью, курю, употребляя наркотические средства. Жизнь-говно. Бабы -консервы. Забьюсь под стол, чтоб никто не трогал. Ссылка на комментарий
straj 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 (изменено) alexwew, спасибо! Но как это "Он для ТЧ"? Не знал что в ТЧ есть затон... Слушай, а попроше что нибудь есть? А то нифига не понимаю... Изменено 31 Мая 2010 пользователем straj Ссылка на комментарий
alexwew 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 (изменено) Да он для тч! Просто так спавнить и в зп можно ноооо говорить не будет нпц с гг. а попроще никак. Щас напишу как через сквад Так в алайф локации на которой спавнишь нпц [103] ; cse_abstract properties section_name = smart_terrain name = pri_smart_pseudodog_lair1 position = 176.663238525391,-2.20351982116699,242.033248901367 direction = 0,-0,-0 ; cse_alife_object properties game_vertex_id = 966 distance = 5.59999990463257 level_vertex_id = 255666 object_flags = 0xffffff3e custom_data = <<END [smart_terrain] cfg=scripts\marsh\smart\mar_sim_2.ltx END ; cse_shape properties shapes = shape0 shape0:type = sphere shape0:offset = 0,0,0 shape0:radius = 1 ; cse_alife_space_restrictor properties restrictor_type = 3 ; se_smart_terrain properties Это смарт террейн с логикой в файл логики [smart_terrain] squad_id = 27 max_population = 1 respawn_params = respawn@1 arrive_dist=65 [respawn@1] spawn_stalker@master spawn_stalker@advanced spawn_stalker@veteran [spawn_stalker@master] spawn_squads = greh_sim_squad_novice ----это имя сквада, тут что хош пиши. spawn_num = 1 далее в [greh_sim_squad_novice]:online_offline_group faction = freedom npc_random = sim_default_greh_0 ---- это нпц твой. npc_in_squad = 1, 1 Вот и все, можно добавить ему пути в вей файл локи. А и кстати, ид нпц ты свое пиши. Изменено 31 Мая 2010 пользователем alexwew я изменился. пью, курю, употребляя наркотические средства. Жизнь-говно. Бабы -консервы. Забьюсь под стол, чтоб никто не трогал. Ссылка на комментарий
straj 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 alexwew, тогда ещё такой вопрос: Где находится эти файлы? И не мог бы ты мне их передать? Желательно без изменений! Ссылка на комментарий
alexwew 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 Находятся они у тя на компе! Если игра есть значит и файлы эти есть, распаковщик вверху в шапке, ну и поиском учить пользоваться? я изменился. пью, курю, употребляя наркотические средства. Жизнь-говно. Бабы -консервы. Забьюсь под стол, чтоб никто не трогал. Ссылка на комментарий
Larry76 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 (изменено) straj, alexwew Стоп,стоп...куда вас понесло? Причём тут сквад? Вот пример логики для непися одиночного... Это я заспавнил командира блокпоста. Стоит на месте и даже поговорить\поторговать можно с ним. Правда ассортимент у него как у обычного сталка(я не стремился его торговцем сделать.) [logic] active = remark1 danger = danger [remark1] meet = meet gather_items_enabled = false help_wounded_enabled = false corpse_detection_enabled = false use_camp = false def_state_standing = ward_noweap def_state_moving1 = patrol no_retreat = true target = story | actor wounded = wounded [smart_terrains] none = true [meet] close_snd_hello = = nil close_snd_bye = = nil close_anim = guard_na close_victim = actor far_anim = nil far_victim = nil close_distance = 2 far_distance = 0 close_snd_distance = 3 abuse = false use = {=actor_enemy} false, true allow_break = false meet_on_talking = false [wounded] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false [danger] ignore_distance = 5 ignore_distance_grenade = 5 ignore_distance_corpse = 5 ignore_distance_hit = 5 ignore_distance_sound = 5 Тут даже мусора наверное много,кое-что выкинуть можно,я ещё не разбирался. Просто так спавнить и в зп можно ноооо говорить не будет нпц с гг. а попроще никак. Здрасте,приехали... А я с кем тогда разговариваю?? Изменено 31 Мая 2010 пользователем Larry76 Правильно заданный вопрос- уже половина ответа! Ссылка на комментарий
alexwew 0 Опубликовано 31 Мая 2010 Поделиться Опубликовано 31 Мая 2010 мм, larry76 я ж по русски вроде написал что может и еще способ есть, но я не знаю его. Вот и написал как вариант спавн начальника сквада в котором 1 нпц. И кстати не вижу ничего глупого в этом. я изменился. пью, курю, употребляя наркотические средства. Жизнь-говно. Бабы -консервы. Забьюсь под стол, чтоб никто не трогал. Ссылка на комментарий
Larry76 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 (изменено) nuklia,помоги пожалуйста разобраться со смарт-террейнами? Исходные данные у меня сравнимы с твоими. Кордон подключенный к ЗП(только вертекс не 934 а 1179 т.к. он подключен у меня после Болот) Сделал всё по твоей инструкции "Перенос и создание карт" пост №90 ,но словил вылет: FATAL ERROR [error]Expression : !m_error_code [error]Function : raii_guard::~raii_guard [error]File : D:\prog_repository\sources\trunk\xrServerEntities\script_storage.cpp [error]Line : 748 [error]Description : ....a.l.k.e.r. - Зов Припяти\gamedata\scripts\_g.script:615: attempt to index global 'sim_board' (a nil value) Одно из двух.... или я что-то не дописал,либо ты что-то недосказал... разобрался...я кое-где запятые в файлах не поставил(в частности при добавлении кордона в списки локаций.) Теперь вопрос в другом: Как заставить их выполнять какую-либо имитацию действий? А то у меня двое подчинённых тупо стоят,а главный лишь изредка прохаживается пару шагов туда-сюда. И ещё, ты бы не мог поделиться опытом,как тебе удалось Сидоровича реанимировать?? Было бы познавательно.Тут и создание эксклюзивного непися и сложный торговец. Изменено 1 Июня 2010 пользователем Larry76 Правильно заданный вопрос- уже половина ответа! Ссылка на комментарий
ZeeK 57 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 Народ а никто не скажет как сделать что бы Сталкеры искали арты постоянно, а не только по заданиям Бороды?Ведь здесь наверняка скрипт который включает\выключает эту возможность. Не соответствует. N6260 Ссылка на комментарий
straj 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 Всё сделал но он нехочет со мной говорить! И стоять не хочит! Кому надо- могу дать ссыль на мою геймдату. И ещё: где прописывается логика? Ссылка на комментарий
nuklia 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 alexwew,, Твой одиночный сквад не совсем корректный, правильнее будет так (буду делать для Затона - иначе запутаемся в террейнах и путях): Создадим сквад из имеющегося уже специфик характера первого попавшегося к примеру долговца - sim_default_duty_4, определим его в ближайший от начала игры смарт-террейн - это zat_a1 , а так-же определим точку его спавна из этого смарта - zat_a1_guard_1_walk (смотрим way_zaton.ltx) - точка двойная, будет ходить по ней и смотреть в точки zat_a1_guard_1_look ; Здесь содержатся дескрипшены сквадов, которые потом можно создавать используя спец функции. [zat_bolvan_1_squad]:online_offline_group faction = stalker npc = sim_default_duty_4 target_smart = zat_a1 spawn_point = zat_a1_guard_1_walk story_id = zat_bolvan_1_squad Теперь добавим этот сквад в стартовую позицию Затона ;;;;;;;;;;;;;;;;;;;;;; FINAL ZATON ;;;;;;;;;;;;;;;;;;;;;;;;; [start_position_zaton] zat_bolvan_1_squad = zat_a1 и в уникальные сквады Затона ;--------- ZATON UNIQUE SQUADS -------- [zat_bolvan_1_squad]:default_squad sim_avail = false Все - сквад готов, команда на спавн получена, начинайте новую игру и встретите его у камней. У нас получился одиночный дефолтный сквад Теперь пойдем дальше - создадим настоящего эксклюзива с индивидуальной логикой. Преждще всего создаем специфик характер: <specific_character id="val_freedom_trader" team_default = "1"> <name>val_freedom_trader_name</name> <icon>ui_npc_u_freedom_2_mask</icon> <map_icon x="1" y="0"></map_icon> <bio></bio> <class>val_freedom_trader</class> <community>freedom</community> <terrain_sect>stalker_terrain</terrain_sect> <rank>450</rank> <reputation>0</reputation> <money min="10000" max="27500" infinitive="1"/> <visual>actors\stalker_freedom\stalker_freedom_2_mask</visual> <snd_config>characters_voice\human_01\freedom\</snd_config> <supplies> [spawn] \n device_torch \n wpn_lr300 \n ammo_5.56x45_ss190 = 5 \n wpn_hpsa \n ammo_9x19_fmj = 5 \n grenade_f1 = 10 \n #include "gameplay\character_items.xml" #include "gameplay\character_food.xml" #include "gameplay\character_drugs.xml" </supplies> #include "gameplay\character_criticals_1.xml" <start_dialog>zat_a2_stalker_barmen_start_dialog</start_dialog> <actor_dialog>zat_a2_linker_b14_quest_init</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_done</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_strange_item</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_sell_artefact</actor_dialog> <actor_dialog>zat_a2_linker_b14_quest_wrong</actor_dialog> <actor_dialog>zat_b57_barmen_about_bloodsucker_lair_dialog</actor_dialog> <actor_dialog>zat_b57_barman_reward_dialog</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor1</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor2</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor3</actor_dialog> <actor_dialog>zat_b22_barmen_about_vampire_actor4</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b7_actor_start</actor_dialog> <actor_dialog>zat_b22_barmen_b5_daring_quest_stalkers</actor_dialog> <actor_dialog>zat_b22_barmen_about_after_quest_b5_dealer_actor4</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_about_new_detector</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_about_compass</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_compass_give_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_compass_double_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_compass_revert_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_take_business_actor_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_army</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_about_sci_guards</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_about_sci_helpers</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_about_halfart_jup_b1</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_oasis_art_sell</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b52_about_snag</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b52_about_nimble</actor_dialog> <actor_dialog>zat_a2_linker_b29_actor_info</actor_dialog> <actor_dialog>zat_a2_linker_b29_actor_get_adv_task</actor_dialog> <actor_dialog>zat_a2_linker_b29_actor_give_adv_task</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_b30_take_money_actor_dialog</actor_dialog> <actor_dialog>zat_a2_stalker_barmen_actor_info</actor_dialog> <actor_dialog>actor_break_dialog</actor_dialog> </specific_character> <character id="val_freedom_trader"> <class>val_freedom_trader</class> </character> ;-------------------------наш свободовец------------------ [val_freedom_trader]:stalker $spawn = "respawn\val_freedom_trader" character_profile = val_freedom_trader spec_rank = regular community = freedom story_id = val_freedom_trader Создаем сквад ; Здесь содержатся дескрипшены сквадов, которые потом можно создавать используя спец функции. [val_freedom_trader_squad]:online_offline_group ; наш свободовец faction = freedom npc = val_freedom_trader target_smart = zat_a1 spawn_point = zat_a1_walker_1_walk story_id = val_freedom_trader_squad ;;;;;;;;;;;;;;;;;;;;;; FINAL ZATON ;;;;;;;;;;;;;;;;;;;;;;;;; [start_position_zaton] val_freedom_trader_squad = zat_a1 ;--------- ZATON UNIQUE SQUADS -------- [val_freedom_trader_squad]:default_squad sim_avail = false Пропишем в смарт-террейне путь к файлу логики чувака [smart_terrain];zat_a1 squad_id = 54 max_population = 3 [exclusive] ; пропишем нашего свободовца в эксклюзивы val_freedom_trader = zaton\val_freedom_trader.ltx ; где лежит файл логики И в заключение сам файл логики [logic@val_freedom_trader] active = walker@freedom ; активируем первую схему - патруль между двумя точками suitable = {=check_npc_name(val_freedom_trader)} ; проверяем - наш ли этот чувак prior = 100 on_hit = hit on_death = death [walker@freedom] path_look = guard_1_look ;вейпоинты в way_zaton.ltx - куда смотрит path_walk = guard_1_walk ;вейпоинты в way_zaton.ltx - где ходит def_state_standing = guard_na ;какую анимацию использует on_actor_dist_le_nvis = 10 | walker@freedom_1 ;дистанция до игрока <= 10 без проверки на видимость | переход на др схему ;on_info = {=actor_has_item(detector_advanced)} %=teleport_npc(esc_a1_freedom_guard_1_walk)% meet = no_meet [walker@freedom_1]:walker@freedom ; производная от первой схемы с изменениями path_walk = guard_2_walk path_look = guard_2_look on_actor_dist_ge_nvis = 10 | walker@freedom ;если дистанция до игрока > 8 без проверки на видимость | возврат в первую схему meet = meet [meet] close_snd_hello = zat_a2_stalker_barmen_greeting ; озвучка - приветствие, без звука - nil close_snd_bye = zat_a2_stalker_barmen_farewell ; озвучка - прощание, без звука - nil close_anim = guard_na close_victim = actor far_anim = nil far_victim = nil close_distance = 2 far_distance = 0 close_snd_distance = 3 abuse = false ;use = {=actor_has_item(detector_advanced)} true, false ;условие диалога -есть детектор"медведь" -говорит use = true allow_break = false meet_on_talking = false [wounded] hp_state = 0|wounded_heavy@help_heavy hp_state_see = 0|wounded_heavy@help_heavy hp_victim = 0|nil hp_fight = 0|false hp_cover = 0|false [danger] ignore_distance = 0 ignore_distance_grenade = 0 ignore_distance_corpse = 0 ignore_distance_hit = 0 ignore_distance_sound = 0 [hit] [death] Обратите внимание на написание точек путей в логике при таком спавне - имя смарт-террейна не пишется zat_a1_guard_1_look Сами понимаете, что если сразу двоих сделаете - передерутся и долговец скорее всего победит - надо кому-нибудь группировку сменить. Продолжение следует... Ссылка на комментарий
straj 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 nuklia, можешь выложить файл "zat_a1" Пользуюсь геймдатой которая наверху, а там половины файлов нет! Ссылка на комментарий
Larry76 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 А что его выкладывать? Вот он весь... [smart_terrain];zat_a1 squad_id = 54 max_population = 3 И всё... Правильно заданный вопрос- уже половина ответа! Ссылка на комментарий
straj 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 Larry76, когда делаю как написал nuklia - получаю вылет! Лог: Expression : fatal error Function : CInifile::Load File : D:\prog_repository\sources\trunk\xrCore\Xr_ini.cpp Line : 274 Description : <no expression> Arguments : Duplicate section 'start_position_zaton' found. Ссылка на комментарий
Larry76 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 Duplicate section 'start_position_zaton' found. Вот твоя проблема. Ты когда копировал, скопировал всё. ;;;;;;;;;;;;;;;;;;;;;; FINAL ZATON ;;;;;;;;;;;;;;;;;;;;;;;;; [start_position_zaton] zat_bolvan_1_squad = zat_a1 тебе надо было скопировать только последнюю строчку у тебя [start_position_zaton] уже есть,смотри внимательней. Правильно заданный вопрос- уже половина ответа! Ссылка на комментарий
straj 0 Опубликовано 1 Июня 2010 Поделиться Опубликовано 1 Июня 2010 Larry76, спасибо. а он будет бессмертный? Я там базу свободы хочу сделать... Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти