Перейти к контенту

Рекомендуемые сообщения

@dsh, без разницы, там константа ставится. На самом деле в некоторых моментах функции ведут себя странно, хотя и управляют одной переменной, это кстати очевидно как раз на этом примере, попробуйте первому попавшемуся новичку из деревни поставить дружественность через константу и через ручную докрутку на величину этой константы. Заодно посмотрите что она возвращает, я когда торговлю писал выкупил пару раз конечно от механики, глубоко копать не стал, вывел закономерности и угомонился, досконально было лень разбираться. Кто въедет, тому грамоту и значок.

Ссылка на комментарий

Граждане, а вы не про это, случаем:

https://dl.dropboxusercontent.com/u/27871782/xl_relations.script ?

 

Куски выдирать не стал, поскольку там всякие разные варианты собраны, смотрите прямо по файлу.

Ссылка на комментарий

Просматривал 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"  вроде как уже обиделся зачем ему второй раз обижаться??? Скрипт скопировал из архива оригинальной игры... Сначала подумал что это я сам там полазил шаловливыми русками...)))))

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

@losiara, да, это ошибка. В оригинале очень много ошибок подобного плана. Я достаточно большую работу проделал в этом ключе, совместил все подобные правки из максимального количества модов (как наших, так и зарубежных, в основном привезли те проекты которые были нацелены на багфикс, но в том же амк тоже очень много сделано), и еще очень много сам исправлял, в частности есть очень много косяков в настройке логики в all.spawn. Видимо у разрабов те, кто заселял, и те, кто писал схемы общались через какой-то "глухой телефон".

 

Но тут есть одна проблема, разрабы из-за своих рук загнали некоторые вещи в такое положение, что они стали работать нестандартно, и отсюда все данные писались из расчета на это нестандартное поведение, из-за этого по привидению все в нормальный вид некоторые вещи начинают работать совершенно неверно с точки зрения работы в оригинале, но совершенно верно с точки зрения здравомыслия, поэтому мне приходилось исправлять логику очень большого количества объектов.

 

К большому сожалению расчет на нестандартное поведение это бич кодеров сталкера, и это еще из движка идет.

Ссылка на комментарий

Ну опечатка, и что ?

 

Тем более, что и сама сцена на свалке сделана в принципе некорректно.

Что-то типа такого должно быть:

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

 

Изменено пользователем Dennis_Chikin
Ссылка на комментарий

Так понятно что опечатка, не фатальная игра не крашится из за этого, ну а что касается скриптов оригинальных, так они много где не совершенны, так же как и ltx. логика кстати соглашусь... Не скрипты кот. отвечают за эту логику, а именно само написание логики.

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

Победил таки я этот баг с некорректным(неполным) срабатыванием функции "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

Жизнь следует измерять поступками, а не временем...

Ссылка на комментарий

Доброго всем Дня. Имеется скрипт, который возвращает кол-во патронов определенного типа в инвентаре. А не подскажите как перелопатить на нет-пакеты от тов. 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 

 

 

Изменено пользователем vampirnik77
Ссылка на комментарий

как перелопатить на нет-пакеты от тов. 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

naxac.gif

Ссылка на комментарий

Где-то в темах скриптования или логики НПС помню, было что-то о том, что если в оригинале ТЧ сталкера, который в начале Агропрома встречает нас с обрезом дробовика, дать любое другое оружие, то это вызовет какой-то хитрый вылет из-за его кривой логики. Хочу поправить сиё недоразумение, где копать?

Ссылка на комментарий

@naxac, Да хотелось бы чтобы в скриптах порядок был. Раз уж взялся пользоваться ими.

Изменено пользователем vampirnik77
Ссылка на комментарий

@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

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

Ссылка на комментарий

Требуется перевести непися из оффлайна в онлайн. Находится он на той же локации, что и ГГ. Делаю следующим образом:

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(). Аналогичные функции есть и для сквадов, монстров, артефактов, машин. Мне бы хоть со сталкерами вне сквадов разобраться. Кто-нибудь знает, в чем проблема?

Изменено пользователем BoBaH_671

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий

@BoBaH_671, про ЗП ничего не знаю, но в коде вижу странность. Если ты пытаешь перевести его в онлайн, значит он в оффлайне в этом момент. Раз он в оффлайне, то level_object_by_sid() не вернет ничего, если только в ЗП оно не работает как-то по другому.

Ссылка на комментарий

 

 

Раз он в оффлайне, то level_object_by_sid() не вернет ничего

Так я и проверяю, что клиентский объект не существует, после чего перевожу серверный в онлайн. Ошибка где-то?

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий

@BoBaH_671, а, это я не внимательно посмотрел. Тогда предложу другую идею, которая сразу в голову пришла. Может причина более очевидна, но что в голову пришло первое, то и предлагаю. Раз ты его по сиду ищешь, он у тебя случаем не из all.spawn? А если из all.spawn, то не сброшен-ли у него флаг, разрешающий использовать флаги can_switch_(on|off)line()? Да и вообще, нет-ли там чего-нибудь странного в object_flags?

Изменено пользователем dsh
Ссылка на комментарий

@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 из секции и радуемся.

Изменено пользователем BoBaH_671

Ранее был известен под ником BoBaH_671.

Ссылка на комментарий

Народ, а есть ли здесь шарящие в скриптах? Я просто хочу применить пару скриптовых баз для CoC(ogse_signals и amk), поскольку там лежат нужные мне функции, а выдирать из файлов их отдельно побаиваюсь. К тому же нужна адаптация. Вот надеюсь, что мне кто-то расскажет, как проделать эту адаптацию своими руками - потому что скрипты я более-менее понимаю, но сам никогда не писал, могу только выбрать нужные файлы(которые мне, собственно говоря, и надо адаптировать).

Все зовут меня Пришедший из Ниоткуда...Почему?Потому что я пришел из ниоткуда и иду в никуда...

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...