Карлан 1 049 Опубликовано 31 Января 2017 Поделиться Опубликовано 31 Января 2017 @dsh, без разницы, там константа ставится. На самом деле в некоторых моментах функции ведут себя странно, хотя и управляют одной переменной, это кстати очевидно как раз на этом примере, попробуйте первому попавшемуся новичку из деревни поставить дружественность через константу и через ручную докрутку на величину этой константы. Заодно посмотрите что она возвращает, я когда торговлю писал выкупил пару раз конечно от механики, глубоко копать не стал, вывел закономерности и угомонился, досконально было лень разбираться. Кто въедет, тому грамоту и значок. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 1 Февраля 2017 Поделиться Опубликовано 1 Февраля 2017 Граждане, а вы не про это, случаем: https://dl.dropboxusercontent.com/u/27871782/xl_relations.script ? Куски выдирать не стал, поскольку там всякие разные варианты собраны, смотрите прямо по файлу. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
losiara 13 Опубликовано 1 Февраля 2017 Поделиться Опубликовано 1 Февраля 2017 Просматривал xr.effects.script и обнаружил функцию обижания на Свалке новичка и бандюков: function gar_dm_bandits_fight(actor, npc) local novice = level_object_by_sid(104) if not novice or not novice:alive() then return end local ignore_actor = distance_between(actor, novice) > 25 local bandit1 = level_object_by_sid(101) if bandit1 then novice:set_relation(game_object.enemy, bandit1) if not ignore_actor then bandit1:set_relation(game_object.enemy, actor) end bandit1:set_relation(game_object.enemy, novice) end local bandit2 = level_object_by_sid(102) if bandit2 then novice:set_relation(game_object.enemy, bandit2) if not ignore_actor then bandit2:set_relation(game_object.enemy, actor) end bandit2:set_relation(game_object.enemy, novice) end local bandit3 = level_object_by_sid(103) if bandit3 then novice:set_relation(game_object.enemy, bandit3) if not ignore_actor then bandit3:set_relation(game_object.enemy, actor) end bandit1:set_relation(game_object.enemy, novice) end end "bandit1:set_relation(game_object.enemy, novice)" -- вот это разве здесь не должно быть "bandit3" 3 строка снизу. 1 бандит с сидом "101" вроде как уже обиделся зачем ему второй раз обижаться??? Скрипт скопировал из архива оригинальной игры... Сначала подумал что это я сам там полазил шаловливыми русками...))))) Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
Карлан 1 049 Опубликовано 1 Февраля 2017 Поделиться Опубликовано 1 Февраля 2017 @losiara, да, это ошибка. В оригинале очень много ошибок подобного плана. Я достаточно большую работу проделал в этом ключе, совместил все подобные правки из максимального количества модов (как наших, так и зарубежных, в основном привезли те проекты которые были нацелены на багфикс, но в том же амк тоже очень много сделано), и еще очень много сам исправлял, в частности есть очень много косяков в настройке логики в all.spawn. Видимо у разрабов те, кто заселял, и те, кто писал схемы общались через какой-то "глухой телефон". Но тут есть одна проблема, разрабы из-за своих рук загнали некоторые вещи в такое положение, что они стали работать нестандартно, и отсюда все данные писались из расчета на это нестандартное поведение, из-за этого по привидению все в нормальный вид некоторые вещи начинают работать совершенно неверно с точки зрения работы в оригинале, но совершенно верно с точки зрения здравомыслия, поэтому мне приходилось исправлять логику очень большого количества объектов. К большому сожалению расчет на нестандартное поведение это бич кодеров сталкера, и это еще из движка идет. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 1 Февраля 2017 Поделиться Опубликовано 1 Февраля 2017 (изменено) Ну опечатка, и что ? Тем более, что и сама сцена на свалке сделана в принципе некорректно. Что-то типа такого должно быть: xr_effects.script local gar_dm_bandits_stalkers = true function gar_dm_bandits_bandits( actor, npc ) if gar_dm_bandits_stalkers then for k, v in pairs( { 101, 102, 103 } ) do -- sid'ы бандюков на свалке local npc = level_object_by_sid( v ) if npc and npc:alive() then npc:set_character_community( "bandit", 0, 0 ) end end end end function gar_dm_bandits_fight( actor, npc ) --log( "log", "gar_dm_bandits_fight" ) if gar_dm_bandits_stalkers then for k, v in pairs( { 101, 102, 103 } ) do -- sid'ы бандюков на свалке local npc = level_object_by_sid( v ) if npc and npc:alive() then npc:set_character_community( "bandit", 0, 0 ) end end end --log( "log", "gar_dm_bandits_fight, info" ) if not has_alife_info( "gar_dm_fight_start" ) then actor:give_info_portion( "gar_dm_fight_start" ) end --log( "log", "gar_dm_bandits_fight, ok" ) end function gar_dm_bandit_demand( actor, npc ) if has_alife_info( "gar_dm_bandit1_demand" ) or has_alife_info( "gar_dm_bandit2_demand" ) or has_alife_info( "gar_dm_bandit3_demand" ) then return end local r = math_random( 3 ) if r == 1 then actor:give_info_portion( "gar_dm_bandit1_demand" ) elseif r == 2 then actor:give_info_portion( "gar_dm_bandit2_demand" ) else actor:give_info_portion( "gar_dm_bandit3_demand" ) end end gulag_garbage.ltx ; ----- ----- Юрик и 3 тополя на плющ^w^w^w бандита ----- ----- [logic@gar_dram_bandit_1] active = walker1@gar_dram_bandit_1 on_death = death@gar_dram_bandit_1 on_combat = combat@gar_dram_bandit_1 on_hit = hit@gar_dram_bandit_1 combat_ignore = combat_ignore [death@gar_dram_bandit_1] on_info = %+gar_dm_bandit1_dead =gar_dm_bandits_fight% [combat@gar_dram_bandit_1] on_info = %=disable_combat_handler =gar_dm_bandits_fight% [hit@gar_dram_bandit_1] on_info = %=gar_dm_bandits_fight% [walker1@gar_dram_bandit_1] path_walk = bandit1_walk path_look = bandit1_look on_info = {+gar_dm_novice_asked_for_help -gar_dm_bandit_warned_plr} remark1@gar_dram_bandit_1 %+gar_dm_bandit_warned_plr% on_info2 = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st%, {+gar_dm_bandit2_warn_plr -gar_dm_bandit2_warned_plr =gar_dm_2nd_nearest_bandit} remark2@gar_dram_bandit_1 %+gar_dm_bandit2_warned_plr% on_info3 = {+gar_dm_bandit1_demand} remark@demand_gar_dram_bandit_1 %-gar_dm_bandit1_demand% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark@demand_gar_dram_bandit_1] snd = gar_dm_bandit_demand anim = claim target = 104 on_signal = sound_end | walker1@gar_dram_bandit_1 %+gar_dm_newbie_no_money% on_info = {+gar_dm_novice_asked_for_help -gar_dm_bandit_warned_plr} remark1@gar_dram_bandit_1 %+gar_dm_bandit_warned_plr% on_info2 = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st%, {+gar_dm_bandit2_warn_plr -gar_dm_bandit2_warned_plr =gar_dm_2nd_nearest_bandit} remark2@gar_dram_bandit_1 %+gar_dm_bandit2_warned_plr% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark1@gar_dram_bandit_1] ;no_move = true target = actor snd = gar_dm_bandit_backoff1 anim = backoff on_signal = sound_end | %+gar_dm_bandit2_warn_plr% on_info = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark2@gar_dram_bandit_1] target = actor snd = gar_dm_bandit_backoff2 anim = backoff2 on_info = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [danger_condition@gar_dram_bandit_1] ignore_distance = 25 ;ignore_distance_sound = 1 [logic@gar_dram_bandit_2] active = walker1@gar_dram_bandit_2 on_death = death@gar_dram_bandit_2 on_combat = combat@gar_dram_bandit_2 on_hit = hit@gar_dram_bandit_2 combat_ignore = combat_ignore [death@gar_dram_bandit_2] on_info = %+gar_dm_bandit2_dead =gar_dm_bandits_fight% [combat@gar_dram_bandit_2] on_info = %=disable_combat_handler =gar_dm_bandits_fight% [hit@gar_dram_bandit_2] on_info = %=gar_dm_bandits_fight% [walker1@gar_dram_bandit_2] path_walk = bandit2_walk path_look = bandit2_look on_info = {+gar_dm_novice_asked_for_help -gar_dm_bandit_warned_plr} remark1@gar_dram_bandit_2 %+gar_dm_bandit_warned_plr% on_info2 = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st%, {+gar_dm_bandit2_warn_plr -gar_dm_bandit2_warned_plr =gar_dm_2nd_nearest_bandit} remark2@gar_dram_bandit_2 %+gar_dm_bandit2_warned_plr% on_info3 = {+gar_dm_bandit2_demand} remark@demand_gar_dram_bandit_2 %-gar_dm_bandit2_demand% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark@demand_gar_dram_bandit_2] target = 104 snd = gar_dm_bandit_demand anim = claim on_signal = sound_end | walker1@gar_dram_bandit_2 %+gar_dm_newbie_no_money% on_info = {+gar_dm_novice_asked_for_help -gar_dm_bandit_warned_plr} remark1@gar_dram_bandit_2 %+gar_dm_bandit_warned_plr% on_info2 = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st%, {+gar_dm_bandit2_warn_plr -gar_dm_bandit2_warned_plr =gar_dm_2nd_nearest_bandit} remark2@gar_dram_bandit_2 %+gar_dm_bandit2_warned_plr% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark1@gar_dram_bandit_2] snd = gar_dm_bandit_backoff1 anim = backoff target = actor on_signal = sound_end | %+gar_dm_bandit2_warn_plr% on_info = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark2@gar_dram_bandit_2] target = actor snd = gar_dm_bandit_backoff2 anim = backoff2 on_info = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [logic@gar_dram_bandit_3] active = walker1@gar_dram_bandit_3 on_death = death@gar_dram_bandit_3 on_combat = combat@gar_dram_bandit_3 on_hit = hit@gar_dram_bandit_3 combat_ignore = combat_ignore [death@gar_dram_bandit_3] on_info = %+gar_dm_bandit3_dead =gar_dm_bandits_fight% [combat@gar_dram_bandit_3] on_info = %=disable_combat_handler =gar_dm_bandits_fight% [hit@gar_dram_bandit_3] on_info = %=gar_dm_bandits_fight% [walker1@gar_dram_bandit_3] path_walk = bandit3_walk path_look = bandit3_look on_info = {+gar_dm_novice_asked_for_help -gar_dm_bandit_warned_plr} remark1@gar_dram_bandit_3 %+gar_dm_bandit_warned_plr% on_info2 = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st%, {+gar_dm_bandit2_warn_plr -gar_dm_bandit2_warned_plr =gar_dm_2nd_nearest_bandit} remark2@gar_dram_bandit_3 %+gar_dm_bandit2_warned_plr% on_info3 = {+gar_dm_bandit3_demand} remark@demand_gar_dram_bandit_3 %-gar_dm_bandit3_demand% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark@demand_gar_dram_bandit_3] target = 104 snd = gar_dm_bandit_demand anim = claim on_signal = sound_end | walker1@gar_dram_bandit_3 %+gar_dm_newbie_no_money% on_info = {+gar_dm_novice_asked_for_help -gar_dm_bandit_warned_plr} remark1@gar_dram_bandit_3 %+gar_dm_bandit_warned_plr% on_info2 = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st%, {+gar_dm_bandit2_warn_plr -gar_dm_bandit2_warned_plr =gar_dm_2nd_nearest_bandit} remark2@gar_dram_bandit_3 %+gar_dm_bandit2_warned_plr% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark1@gar_dram_bandit_3] target = actor snd = gar_dm_bandit_backoff1 anim = backoff on_signal = sound_end| %+gar_dm_bandit2_warn_plr% on_info = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [remark2@gar_dram_bandit_3] target = actor snd = gar_dm_bandit_backoff2 anim = backoff2 on_info = {+gar_dm_novice_dead} %+gar_dm_bandits_change_st% ;reactions = ignore danger = danger_condition@gar_dram_bandit_1 combat_ignore_cond = { -gar_dm_fight_start } [logic@gar_dram_novice] active = walker10@gar_dram_novice on_death = death@gar_dram_novice on_combat = combat@gar_dram_novice on_hit = hit@gar_dram_novice actor_dialogs = actor_dialogs@gar_dram_novice combat_ignore = combat_ignore [actor_dialogs@gar_dram_novice] id = gar_dram_novice_level [death@gar_dram_novice] on_info = %+gar_dm_novice_dead =gar_dm_bandits_fight +sar2_death_4% [death@dram_novice] on_info = %+sar2_death_4% [combat@gar_dram_novice] on_info = remark@after_fight_gar_dram_novice %=disable_combat_handler =gar_dm_bandits_fight% [hit@gar_dram_novice] on_info = remark@after_fight_gar_dram_novice %=gar_dm_bandits_fight% [walker10@gar_dram_novice] path_walk = novice_walk path_look = novice_look on_info = %=gar_dm_bandit_demand% walker1@gar_dram_novice meet = no_meet ;combat_ignore_cond = { -gar_dm_fight_start } [walker1@gar_dram_novice] path_walk = novice_walk path_look = novice_look on_actor_dist_le_nvis = 15 | remark1@gar_dram_novice on_info = {+gar_dm_newbie_no_money} remark@no_money_gar_dram_novice %-gar_dm_newbie_no_money% on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight% ;reactions = ignore danger = danger_condition@gar_dram_novice meet = no_meet combat_ignore_cond = { -gar_dm_fight_start } [remark@no_money_gar_dram_novice] target = 102 snd = gar_dm_newbie_no_money anim = refuse on_signal = action_end | walker1@gar_dram_novice %=gar_dm_bandit_demand% on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight% on_actor_dist_le_nvis = 15 | remark1@gar_dram_novice ;reactions = ignore danger = danger_condition@gar_dram_novice meet = no_meet combat_ignore_cond = { -gar_dm_fight_start } [remark1@gar_dram_novice] anim = hello snd = gar_dm_newbie_help_me target = actor on_signal = sound_end | remark2@gar_dram_novice %+gar_dm_novice_asked_for_help =gar_dm_bandits_bandits% on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight% ;reactions = ignore danger = danger_condition@gar_dram_novice meet = no_meet combat_ignore_cond = { -gar_dm_fight_start } [remark2@gar_dram_novice] target = actor anim = wait on_actor_dist_le_nvis = 10 | remark3@gar_dram_novice on_actor_dist_ge_nvis = 25 | %=gar_dm_bandits_fight% on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice on_info3 = {+gar_dm_end} %=gar_dm_bandits_fight% on_timer = 20000 | %=gar_dm_bandits_fight% ;reactions = ignore danger = danger_condition@gar_dram_novice meet = no_meet combat_ignore_cond = { -gar_dm_fight_start } [remark3@gar_dram_novice] target = actor anim = wait snd = help arrival_timeout = 1500 on_signal = move_end | remark@after_fight_gar_dram_novice %=gar_dm_bandits_fight% on_info2 = {+gar_dm_bandit1_dead +gar_dm_bandit2_dead +gar_dm_bandit3_dead} remark@after_fight_gar_dram_novice on_timer = 5000 | %=gar_dm_bandits_fight% ;reactions = ignore danger = danger_condition@gar_dram_novice meet = no_meet combat_ignore_cond = { -gar_dm_fight_start } [remark@after_fight_gar_dram_novice] anim = guard target = actor snd = gar_dm_newbie_thank_you on_timer = 30000 | walker2@gar_dram_novice %=actor_friend% danger = danger_condition@gar_dram_novice meet = meet@gar_dram_novice [walker2@gar_dram_novice] path_walk = gar_dm_novice_walk meet = meet@gar_dram_novice on_signal = new_gulag| %+gar_dm_novice_change_st% [meet@gar_dram_novice] meet_state = 3|guard@wait meet_state_wpn = 3|guard@wait victim = 3|actor victim_wpn = 3|actor use = true use_wpn = true [danger_condition@gar_dram_novice] ignore_distance = 1 Изменено 1 Февраля 2017 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
losiara 13 Опубликовано 1 Февраля 2017 Поделиться Опубликовано 1 Февраля 2017 Так понятно что опечатка, не фатальная игра не крашится из за этого, ну а что касается скриптов оригинальных, так они много где не совершенны, так же как и ltx. логика кстати соглашусь... Не скрипты кот. отвечают за эту логику, а именно само написание логики. Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
losiara 13 Опубликовано 2 Февраля 2017 Поделиться Опубликовано 2 Февраля 2017 Победил таки я этот баг с некорректным(неполным) срабатыванием функции "set_gulag_enemy_actor(.........)". Сделал следующее: Активировал через рестриктор такую функцию: function enemy_osoznanie (actor, npc) local gulag = xr_gulag.get_gulag_by_name ("gar_osoznanie_control") -- название гулага if (gulag) then gulag:set_relation (game_object.enemy, actor) end end Уж не знаю почему это произведение лучше чем стандартная "set_gulag_enemy_actor(.........)", но работает, обижает как нейтралов, так и друзей до уровня врагов, в общем то что и требовалось... 1 Жизнь следует измерять поступками, а не временем... Ссылка на комментарий
vampirnik77 121 Опубликовано 4 Февраля 2017 Поделиться Опубликовано 4 Февраля 2017 (изменено) Доброго всем Дня. Имеется скрипт, который возвращает кол-во патронов определенного типа в инвентаре. А не подскажите как перелопатить на нет-пакеты от тов. Artos'? Платформа CoP function get_ammo_size(obj) local pk = net_packet() obj:STATE_Write(pk) pk:r_seek(pk:w_tell()-2) return pk:r_u16() -- ammo_left end function ammo_count(section) local n = 0 local sobj db.actor:iterate_inventory( function (actor, item) if item:section() == section then sobj = alife():object( item:id() ) if sobj then n = n + get_ammo_size(sobj) end end end, db.actor) return n end Изменено 4 Февраля 2017 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
naxac 2 447 Опубликовано 4 Февраля 2017 Поделиться Опубликовано 4 Февраля 2017 как перелопатить на нет-пакеты от тов. Artos'?А зачем? С ними это станет намного медленнее. И эта функция вполне нормальная. Только, раз это ЗП, стоит добавить в нее одну строчку function get_ammo_size(obj) local pk = net_packet() pk:w_begin(0) -- вот эту obj:STATE_Write(pk) pk:r_seek(pk:w_tell()-2) return pk:r_u16() -- ammo_left end т.к. позиция чтения/записи иногда сама не ставится в начало. Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
Капрал Хикс 534 Опубликовано 4 Февраля 2017 Поделиться Опубликовано 4 Февраля 2017 Где-то в темах скриптования или логики НПС помню, было что-то о том, что если в оригинале ТЧ сталкера, который в начале Агропрома встречает нас с обрезом дробовика, дать любое другое оружие, то это вызовет какой-то хитрый вылет из-за его кривой логики. Хочу поправить сиё недоразумение, где копать? Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 5 Февраля 2017 Поделиться Опубликовано 5 Февраля 2017 В моделях, не ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
vampirnik77 121 Опубликовано 5 Февраля 2017 Поделиться Опубликовано 5 Февраля 2017 (изменено) @naxac, Да хотелось бы чтобы в скриптах порядок был. Раз уж взялся пользоваться ими. Изменено 5 Февраля 2017 пользователем vampirnik77 Официальная страница проекта Neof-One Crew Ссылка на комментарий
Zander_driver 10 334 Опубликовано 5 Февраля 2017 Поделиться Опубликовано 5 Февраля 2017 @vampirnik77, function get_ammo_size(obj) local packet = m_net_utils.Get_NetPacket(obj) return packet.ammo_left end 1 Мод, где не бывает одинаковых путей - Судьба Зоны. (Лучшее, что у меня получилось на X-Ray) На базе модифицированного движка OGSR Engine. Бывший мододел на X-Ray / Начинающий игродел на Unreal Engine. Программист. AMD Ryzen 9 7950X (16 ядер, 32 потока, 5.75 ГГц); RTX 3080; 128 ГБ DDR5; Arctic Liquid Freezer II-420; 3 ТБ SSD PCIe 4.0; 4ТБ HDD. Ссылка на комментарий
MegaStalker 66 Опубликовано 10 Февраля 2017 Поделиться Опубликовано 10 Февраля 2017 (изменено) Народ,к вам вопрос. Есть ли какие-либо аналоги нет-пакетов в ванильном сталкере и можно ли использовать их вместо аналогов из модов?(опыта в скриптах почти ноль) И в каком файле эти функции лежат? Я просто хочу вместо функций АМК и ОГСЕ использовать функции самой игры, если это реально - адаптировать самостоятельно скрипты я не смогу. Изменено 11 Февраля 2017 пользователем MegaStalker Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда... Ссылка на комментарий
Overfirst 631 Опубликовано 11 Февраля 2017 Поделиться Опубликовано 11 Февраля 2017 (изменено) Требуется перевести непися из оффлайна в онлайн. Находится он на той же локации, что и ГГ. Делаю следующим образом: function SetSwitchOnline(Sid) local sobj = alife():story_object(Sid) if not sobj then return end -- local obj = level_object_by_id(sobj.id) -- if not obj then alife():set_switch_online(sobj.id, true) alife():set_switch_offline(sobj.id, false) end end Но ничего не происходит. Мне говорил @Malandrinus, что этого, наверно, мало, что надо ещё какие-то махинации проводить. Намекал на функции из se_stalker.script, но что и как использовать, я до конца не понял. Платформа ЗП. В se_stalker.script есть функции se_stalker:can_switch_offline() и se_stalker:can_switch_online(). Аналогичные функции есть и для сквадов, монстров, артефактов, машин. Мне бы хоть со сталкерами вне сквадов разобраться. Кто-нибудь знает, в чем проблема? Изменено 11 Февраля 2017 пользователем BoBaH_671 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
dsh 3 824 Опубликовано 11 Февраля 2017 Поделиться Опубликовано 11 Февраля 2017 @BoBaH_671, про ЗП ничего не знаю, но в коде вижу странность. Если ты пытаешь перевести его в онлайн, значит он в оффлайне в этом момент. Раз он в оффлайне, то level_object_by_sid() не вернет ничего, если только в ЗП оно не работает как-то по другому. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Overfirst 631 Опубликовано 11 Февраля 2017 Поделиться Опубликовано 11 Февраля 2017 Раз он в оффлайне, то level_object_by_sid() не вернет ничего Так я и проверяю, что клиентский объект не существует, после чего перевожу серверный в онлайн. Ошибка где-то? Ранее был известен под ником BoBaH_671. Ссылка на комментарий
dsh 3 824 Опубликовано 11 Февраля 2017 Поделиться Опубликовано 11 Февраля 2017 (изменено) @BoBaH_671, а, это я не внимательно посмотрел. Тогда предложу другую идею, которая сразу в голову пришла. Может причина более очевидна, но что в голову пришло первое, то и предлагаю. Раз ты его по сиду ищешь, он у тебя случаем не из all.spawn? А если из all.spawn, то не сброшен-ли у него флаг, разрешающий использовать флаги can_switch_(on|off)line()? Да и вообще, нет-ли там чего-нибудь странного в object_flags? Изменено 11 Февраля 2017 пользователем dsh dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
Overfirst 631 Опубликовано 11 Февраля 2017 Поделиться Опубликовано 11 Февраля 2017 (изменено) @dsh, нет, он не из all.spawn. В общем, получилось у меня с помощью товарища @SkyLoader, надо было обращаться к серверному объекту по-другому. Вот так всё работает: function ObjSetSwitchOnline(story_obj_id) local obj_id = story_objects.get_story_objects_registry():get(story_obj_id) if obj_id ~= nil then local sobj = alife():object(obj_id) local obj = get_story_object(sobj.id) if sobj ~= nil and obj == nil then alife():set_switch_online(sobj.id, true) alife():set_switch_offline(sobj.id, false) else abort("var 'sobj' == nil!") end else abort("var 'obj_id' == nil!") end end Есть нюансы: в ЗП неписи есть сквадовые и внесквадовые. Если непись находится в скваде, то нужно писать story_id сквада, а не самого непися. Если непись внесквадовый - всё просто - вписываем его story_id из секции и радуемся. Изменено 11 Февраля 2017 пользователем BoBaH_671 Ранее был известен под ником BoBaH_671. Ссылка на комментарий
MegaStalker 66 Опубликовано 11 Февраля 2017 Поделиться Опубликовано 11 Февраля 2017 Народ, а есть ли здесь шарящие в скриптах? Я просто хочу применить пару скриптовых баз для CoC(ogse_signals и amk), поскольку там лежат нужные мне функции, а выдирать из файлов их отдельно побаиваюсь. К тому же нужна адаптация. Вот надеюсь, что мне кто-то расскажет, как проделать эту адаптацию своими руками - потому что скрипты я более-менее понимаю, но сам никогда не писал, могу только выбрать нужные файлы(которые мне, собственно говоря, и надо адаптировать). Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда... Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти