Jump to content

Recommended Posts

14 часов назад, losiara сказал:

вылет безлоговый

Посмотреть последнее, что будет в логе, если принудительно его писать. Надо в файле _g.script поправить так:

Скрытый текст

rlog = 1
function printf(fmt,...)
    -- принудительная запись в лог, для выявления причин безлоговых вылетов 
    -- v.0.77 : добавлено условие rlog 
    if rlog == 1 then local con=get_console()con:execute(string_gsub(string_format(fmt,...)," ","_"))con:execute("flush") end
    local arg = {...}
    if (arg and arg[1] ~= nil) then    
        log(string_format(fmt,...))
    end
end 

Потом вернуть как было или выставить rlog = 0

Share this post


Link to post
Share on other sites
PseudoWolf    1

Всем предновогоднего настроя! Ребят, подскажите функцию выдачи инфопоршня при взятии предмета? В гугле вроде всё перешарил, так и не нашёл ни чего толкового..

  • Sad 3

Share this post


Link to post
Share on other sites

Всем привет. Может ли кто-то подсказать теорию работы схемы mob_jump? 
На практике я вообще не могу разобраться с принципами её работы, а гайд по настройке логики содержит 3,5 слова касательно mob_jump.
Ниже кидаю пример логики своего снорка.
 

Скрытый текст

[spawner]
cond = {+actor_in_rest_exit}

[logic]
active = mob_walker@first

[mob_walker@first]
path_walk = lv_snork_walk_00
path_look = lv_snork_look_01
braindead = true
on_signal = jump| mob_jump

[mob_jump]
path_jump = lv_snork_walk_01
ph_jump_factor = 4
offset = 0,0,0
on_signal = jumped| mob_walker@sec

[mob_walker@sec]
path_walk = lv_snork_walk_01
path_look = lv_snork_look_01
braindead = true
END

 

Т.е., по сути, он должен двигаться walker'ом, по сигналу в последней точке переходить в jump'ера, прыгать, а затем продолжать двигаться следующим walker'ом. Но он вообще не прыгает, то есть, тупо прётся на точку обычным walker'ом. Пробовал и с разных позиций заставлять его прыгать (изначальная идея - прыжок с крыши дома прямо перед мордой эктора; сейчас он даже на ровной земле не прыгает), и jump_factor разный ставить - ничего вообще не происходит. Разве что, при экспериментах со спавном он может появляться в рандомных местах возле эктора. Буду благодарен за советы. 

Share this post


Link to post
Share on other sites

Всем привет, как убрать античит из оп 2.1? Хочу изменить урон нпс по мне. Слишком они сильно бьют даже в экзоскелете с артами...

Share this post


Link to post
Share on other sites
Змея    240

@Дмитрий Зверев (Книги, Вселенная и вообще),  всё отлично работает. Только для схемы бери снорка-попрыгунчика.

Ну иногда приходится помучаться с выбором  ph_jump_factor = 4  - как оно работает, я лично так и не поняла))

Ага. И offset настрой. У тебя высота прыжка - НОЛЬ.

 

Share this post


Link to post
Share on other sites
losiara    13

Добрый день!!! С наступающим!

Необходимо через рестриктор сделать ГГ другом для указанного гулага, вот запарился какой скрипт будет верным?

Скрытый текст

function set_gulag_friend_actor( actor, npc, p )
	if p[1] then
		xr_gulag.setGulagGoodwill(p[1], actor)
	end
end

function gulag_friend_actor( actor, npc, p )
	if p[1] then
		xr_gulag.setGulagfriend(p[1], actor)
	end
end

В оригинале есть функция делающая актора врагом гулагу, а мне надобно обратное, вылетов нет, но и не работает, а вроде как должна...

xr_gulag.script

Скрытый текст

-- установить расположенине всех членов смарта к указанному объекту
function setGulagGoodwill( name_or_sid, goodwill, target_obj )
	local gulag = get_gulag( name_or_sid )

	if gulag then
		gulag:set_goodwill( goodwill, target_obj )
	end
end

-- сделать указанного персонажа другом всех персонажей смарта
function setGulagfriend( name_or_sid, target_obj )
        setGulagRelation( name_or_sid, game_object.friend, target_obj )
end

Попробовал и сам наваять:

Скрытый текст

function friend_gar_parazit (actor, npc)     
    local gulag = xr_gulag.get_gulag_by_name ("bar_zastava_2") -- название гулага
    if (gulag) then
       gulag:set_relation (game_object.friend, actor)
    end   
end

Гулаг взят из оригинальной игры.

 

Edited by losiara

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

Share this post


Link to post
Share on other sites

@Змея, спасибо. Попытался по твоему совету взять snork_normal (именно они, судя по логике, скакали на ЧАЭС-2) и покрутить offset Y. Началось вообще невообразимое - снорк стал аки воздушный шар летать по всей карте, проваливаться под текстуры, спавниться где угодно и прочее. Причём, если делать jump_factor и offset в пределах нормы для прыжка с дома (3 и 4 соответственно, имхо), то схема опять не работает. Даже не знаю, что и делать. Не знаешь, часом, какой offset Y можно поставить для прыжка с Y 14 на Y 9? Спасибо.

Edited by Дмитрий Зверев (Книги, Вселенная и вообще)

Share this post


Link to post
Share on other sites
DoberBull    278

Всем привет. Помогите пж с распаковкой ресурсов ОП-2.1. Самому никак просто

  • Согласен 1

4e0JGsC.png

Share this post


Link to post
Share on other sites
9 часов назад, DoberBull сказал:

Помогите пж с распаковкой ресурсов ОП-2.1

Ты сталкер или где? Кто ищет выход за счёт других?

  • Like 2
  • Confused 1

Share this post


Link to post
Share on other sites
DoberBull    278

@mole venomous так интересно, вдруг вышло у кого. Распаковщики разные не берут, я уже все перепробовал. Да и вопрос вроде безобидный

  • Согласен 1

4e0JGsC.png

Share this post


Link to post
Share on other sites
Змея    240
18 часов назад, Дмитрий Зверев (Книги, Вселенная и вообще) сказал:

Не знаешь, часом

Неа...Только методом проб и ошибок.

Вот у нас с горушки высотой метров 10 прыгают:

ph_jump_factor = 1.2
offset = 0,4,0

А вот перепрыгивают через 3-х метровый забор:

ph_jump_factor = 0.7
offset = 0,4,0

Edited by Змея
  • Полезно 1

Share this post


Link to post
Share on other sites
naxac    1,510

@Cagorich

функция для передачи нескольких предметов от актера или нпс к другому нпc

 

 

function transfer_some_items( section, count, in_npc, out_npc  )
    if out_npc == nil then
        out_npc = db.actor
    end

    local n = 0
    out_npc:iterate_inventory( function ( npc, item )
        if n == count then return end
        if item:section() == section then
            our_npc:transfer_item( item, in_npc )
            n = n + 1
        end
    end,
    out_npc )

    if out_npc:id() == 0 then
        news_manager.relocate_item( out_npc, "out", section )
    end
end
 

Применять: script_name.transfer_some_items( "bandage", 4, second_speaker )
Похожая функция для удаления нескольких одинаковых предметов из инвентаря актера

 

 

function out_some_items( section, number )
    local n = 0
    db.actor:iterate_inventory( function ( actor, item )
        if n == number then return end
        if item:section() == section then
            local se_item = alife():object( item:id() )
            if se_item then alife():release( se_item, true ) end
            n = n + 1
        end
    end,
    db.actor )
    news_manager.relocate_item( db.actor, "out", section )
end
 

Применять: script_name.out_some_items( "bandage", 4 )

Edited by naxac
  • Полезно 3

Аддон для ОП-2.09.2: Яндекс/Google/GitHub

naxac.gif

Share this post


Link to post
Share on other sites
Graff46    446

Возможно ли чтение\запись нэт-пакетов актора?

 

Такое не работает

local act = alife():object(0)
local pk = m_netpk.get(act)

Но так работает:

local packet = net_packet()
act:STATE_Write(packet)

Может кто "карту смещений" нэт-пакета для актора предоставить?


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Graff46    446

Вот что удалось наработать:

1. В m_netpk.script есть разбор ГГ на нэт-пакет, но при попытке передать ГГ скрипту - вылет.

2. Я используя наработки m_netpk.script написал ф-цию для чтения пакета ГГ.

Скрытый текст

function actnet()
	local c = {	-- Взято из m_netpk.script
	
			{ name = 'game_vertex_id',  type = 'u16', default = -1        },
			{ name = 'distance',        type = 'f32', default =  0.0      },
			{ name = 'direct_control',  type = 'u32', default =  1        },
			{ name = 'level_vertex_id', type = 'u32', default = -1        },
			{ name = 'object_flags',    type = 'h32', default =  0        },
			--{ name = 'custom_data',   type = 'sz',  default = ''        }, --/#-# if only 'string'
			{ name = 'custom_data',     type = 'sz',  default = "" }, --/#!# used helpers
			{ name = 'story_id',        type = 's32', default = -1        },
			{ name = 'spawn_story_id',  type = 's32', default = -1        },
			
			{ name = 'money',              type = 'u32', default = 0           },
			{ name = 'specific_character', type = 'sz',  default = ''          },
			{ name = 'trader_flags',       type = 'h32', default = 1           },
			{ name = 'character_profile',  type = 'sz',  default = ''          },
			{ name = 'community_index',    type = 'h32', default = -1          },
			{ name = 'rank',               type = 'h32', default = -2147483647 },
			{ name = 'reputation',         type = 'h32', default = -2147483647 },
			{ name = 'character_name',     type = 'sz',  default = ''          },
			--{ name = 'cse_alife_trader_abstract__unk2', type = 'u8', default = 0, ver = 4 }, --/ SCoP
			--{ name = 'cse_alife_trader_abstract__unk3', type = 'u8', default = 0, ver = 4 }  --/ SCoP
			
			{ name = 'skeleton_name',  type = 'sz',  default = '$editor', hook = 'idle' },
			{ name = 'skeleton_flags', type = 'u8',  default = 0  },
			{ name = 'source_id',      type = 'h16', default = -1 },
    
    		{ name = 'bones_mask',     type = 'u8v8',  default = {0,0,0,0,0,0,0,0} }, -- на этом вылет
			{ name = 'root_bone',      type = 'u16',   default = 0                 },
			{ name = 'bbox_min',       type = 'f32v3', default = vector()          },
			{ name = 'bbox_max',       type = 'f32v3', default = vector()          },
			{ name = 'bones_count',    type = 'u16',   default = 0                 }, --/#~# changed name ('bone_count')
	
			{ name = 'ph_position',    type = 'q8v3',  default = {0,0,0},  },
			{ name = 'ph_rotation',    type = 'q8v4',  default = {0,0,0,0} },
			{ name = 'enabled',        type = 'b8',    default = true      }
	

		}
	
	local act = alife():object(0)
	
	local packet = net_packet()
	act:STATE_Write(packet)
	local str = ""
	for _, v in ipairs(c) do
		str = str.."\n"..  v.name..":".. tostring(m_netpk['_r_'..v.type](packet) ) 
	end
	nt.logfile(str) -- Запись в файл
end

 

3. Есть ошибки в работе: Вылет при попытке чтения методом :r_vec3(vector()), ошибки в парсинге. Возможно 1-я ошибка возникает из 2-ой.

Я читал пакет до того места где надо читать векторы и вот что получил:

Скрытый текст


game_vertex_id:3283 -- Верно
distance:64.400001525879 -- Наверное Верно
direct_control:1 -- Наверное Верно
level_vertex_id:79894 -- Верно
object_flags:-65 -- Наверное Верно

********************* custom_data***************
custom_data:[dont_spawn_character_supplies]

[spawn]
;wpn_binoc
detector_simple
device_torch
vodka
vodka

story_id:-1
spawn_story_id:-1

*******************************************************
money:1869898593 -- Не верно! У ГГ было 40р.!
specific_character:rs\hero\stalker_novice -- Побито! должно быть : "actors\hero\stalker_novice"
trader_flags:0 -- Наверное Верно
character_profile: -- Нет ничего
community_index:4161536 -- Не вено (нет столько группировок)
rank:0 -- Вроде не верно
reputation:-16777216 -- Вроде не верно
character_name:я -- Верно
skeleton_name: -- ?
skeleton_flags:0 -- ?
source_id:0 -- ?

 

 

Edited by Graff46

fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Kirgudu    649

@Graff46, не всё взял, если не ошибаюсь, вот и появились неверные значения. Например, после spawn_story_id должно быть, емнип, чтение визуала (net_cse_alife_dynamic_object_visual).

Share this post


Link to post
Share on other sites
Graff46    446

@Kirgudu, Я делал из примера m_netpk.script . Вот сейчас переделал:

Скрытый текст


function actnet()
	local c = {
			{ name = 'game_vertex_id',  type = 'u16', default = -1        },
			{ name = 'distance',        type = 'f32', default =  0.0      },
			{ name = 'direct_control',  type = 'u32', default =  1        },
			{ name = 'level_vertex_id', type = 'u32', default = -1        },
			{ name = 'object_flags',    type = 'h32', default =  0        },
			--{ name = 'custom_data',   type = 'sz',  default = ''        }, --/#-# if only 'string'
			{ name = 'custom_data',     type = 'sz',  default = "" }, --/#!# used helpers
			{ name = 'story_id',        type = 's32', default = -1        },
			{ name = 'spawn_story_id',  type = 's32', default = -1        },
			
			--{ name = 'money',              type = 's8', default = 0           },
			--{ name = 'specific_character', type = 'sz',  default = ''          },
			--{ name = 'trader_flags',       type = 'h32', default = 1           },
			{ name = 'visual_name',  type = 'sz', default = '' },
			{ name = 'visual_flags', type = 'u8', default = 0  },
			
			{ name = 'g_team',                   type = 'u8',      default = -1  },
			{ name = 'g_squad',                  type = 'u8',      default = -1  },
			{ name = 'g_group',                  type = 'u8',      default = -1  },
			{ name = 'health',                   type = 'f32',     default = 1.0 },
			{ name = 'dynamic_out_restrictions', type = 'l32u16v', default = {}  },
			{ name = 'dynamic_in_restrictions',  type = 'l32u16v', default = {}  },
			{ name = 'killer_id',                type = 'h16',     default = -1  },
			{ name = 'game_death_time',          type = 'u8v8',    default = {0,0,0,0,0,0,0,0} },
			
			{ name = 'character_profile',  type = 'sz',  default = ''          },
			{ name = 'community_index',    type = 'h32', default = -1          },
			{ name = 'rank',               type = 'h32', default = -2147483647 },
			{ name = 'reputation',         type = 'h32', default = -2147483647 },
			{ name = 'character_name',     type = 'sz',  default = ''          },
			--{ name = 'cse_alife_trader_abstract__unk2', type = 'u8', default = 0, ver = 4 }, --/ SCoP
			--{ name = 'cse_alife_trader_abstract__unk3', type = 'u8', default = 0, ver = 4 }  --/ SCoP
			
			{ name = 'skeleton_name',  type = 'sz',  default = '$editor', hook = 'idle' },
			{ name = 'skeleton_flags', type = 'u8',  default = 0  },
			{ name = 'source_id',      type = 'h16', default = -1 },
			
			{ name = 'bones_mask',     type = 'u8v8',  default = {0,0,0,0,0,0,0,0} },
			{ name = 'root_bone',      type = 'u16',   default = 0                 },
			--[[ { name = 'bbox_min',       type = 'f32v3', default = vector()          },
			{ name = 'bbox_max',       type = 'f32v3', default = vector()          },
			{ name = 'bones_count',    type = 'u16',   default = 0                 }, --/#~# changed name ('bone_count')
	
			{ name = 'ph_position',    type = 'q8v3',  default = {0,0,0},  },
			{ name = 'ph_rotation',    type = 'q8v4',  default = {0,0,0,0} },
			{ name = 'enabled',        type = 'b8',    default = true      }
			]]
		}
	
	local act = alife():object(0)
	
	local packet = net_packet()
	act:STATE_Write(packet)
	local str = ""
	for _, v in ipairs(c) do
		str = str.."\n"..  v.name..": ".. tostring(m_netpk['_r_'..v.type](packet) ) 
	end
	nt.logfile(str)
end

 

Как дохожу до векторов - вылет.

Вот результат смещений :

Скрытый текст


game_vertex_id: 3283
distance: 64.400001525879
direct_control: 1
level_vertex_id: 79894
object_flags: -65
custom_data: [dont_spawn_character_supplies]

[spawn]
;wpn_binoc
detector_simple
device_torch
vodka
vodka
story_id: -1
spawn_story_id: -1
visual_name: actors\hero\stalker_novice
visual_flags: 0
g_team: 0
g_squad: 0
g_group: 0
health: 1
dynamic_out_restrictions: table: 0FE10940
dynamic_in_restrictions: table: 14A0F5F8
killer_id: 65535
game_death_time: table: 14A05EA8 -- возможно тут пошло не так
character_profile: (  -- пошло точно всё ни так , и дальше тоже
community_index: 1667301376
rank: 7499636
reputation: 0
character_name: actor -- а тут норм. и предыдущий возможно тоже
skeleton_name:
skeleton_flags: 0
source_id: 0
bones_mask: table: 437421A0
root_bone: 64450

 

Может подскажите чего по смещениям?

Edited by Graff46

fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Kirgudu    649

Вообще, в m_netpk и у меня были связанные с актором непонятки. В этом модуле существуют два класса актора: "net_cse_alife_creature_actor" для ТЧ и "net_se_actor" для ЧН/ЗП. И если с первым классом всё, в принципе, понятно, то, как я обнаружил года полтора назад, для класса "net_se_actor" прописан конструктор от первого класса, "net_cse_alife_creature_actor". Насколько это правомерно с точки зрения языка Lua - сказать не могу, тут нужна помощь специалистов. Собственно, из-за неуверенности и невозможности в то время всё проверить я и не стал ничего править в модуле самостоятельно, хотя стоило, наверное, задать вопрос здесь.

 

@Graff46, по конкретному наполнению нет-пакета актора и смещениям не подскажу - нет сейчас возможности порыться в коде. Но если моё предположение верное, и единственное, почему модуль валится - неверный конструктор, тогда стоит попробовать это исправить и посмотреть, что будет. Ведь что даёт запись двух одинаковых функций "function net_cse_alife_creature_actor:__init(...)" подряд? А то, что первая перезатирается второй, и при инициализации класса для ТЧ начинает вызываться конструктор для ЧН/ЗП.

 

Update:

Цитата

game_death_time: table: 14A05EA8                  -- Тут вроде сбилось?

Нет, тут CTime в виде таблицы, всё правильно. А вот дальше должны быть update-свойства, разве нет? Не помню. (вспомнил: конечно не должны. тут только state-часть)

Edited by Kirgudu

Share this post


Link to post
Share on other sites
Graff46    446

@Kirgudu, Посидел я повнимательнее и собрал смещения :

Скрытый текст


function actnet()
local c = {

	{ name = 'game_vertex_id',  type = 'u16', default = -1        },
	{ name = 'distance',        type = 'f32', default =  0.0      },
	{ name = 'direct_control',  type = 'u32', default =  1        },
	{ name = 'level_vertex_id', type = 'u32', default = -1        },
	{ name = 'object_flags',    type = 'h32', default =  0        },
	--{ name = 'custom_data',   type = 'sz',  default = ''        }, --/#-# if only 'string'
	{ name = 'custom_data',     type = 'sz',  default = "" 			}, --/#!# used helpers
	{ name = 'story_id',        type = 's32', default = -1        },
	{ name = 'spawn_story_id',  type = 's32', default = -1        },
		
	{ name = 'visual_name',  type = 'sz', default = '' },
	{ name = 'visual_flags', type = 'u8', default = 0  },
	
	{ name = 'g_team',                   type = 'u8',      default = -1  },
	{ name = 'g_squad',                  type = 'u8',      default = -1  },
	{ name = 'g_group',                  type = 'u8',      default = -1  },
	{ name = 'health',                   type = 'f32',     default = 1.0 },
	{ name = 'dynamic_out_restrictions', type = 'l32u16v', default = {}  },
	{ name = 'dynamic_in_restrictions',  type = 'l32u16v', default = {}  },
	{ name = 'killer_id',                type = 'h16',     default = -1  },
	{ name = 'game_death_time',          type = 'u8v8',    default = {0,0,0,0,0,0,0,0} },	

	{ name = 'money',              type = 'u32', default = 0           },
	{ name = 'specific_character', type = 'sz',  default = ''          },
	{ name = 'trader_flags',       type = 'h32', default = 1           },
	{ name = 'character_profile',  type = 'sz',  default = ''          },
	{ name = 'community_index',    type = 'h32', default = -1          },
	{ name = 'rank',               type = 'h32', default = -2147483647 },
	{ name = 'reputation',         type = 'h32', default = -2147483647 },
	{ name = 'character_name',     type = 'sz',  default = ''          },
	--{ name = 'cse_alife_trader_abstract__unk2', type = 'u8', default = 0, ver = 4 }, --/ SCoP
	--{ name = 'cse_alife_trader_abstract__unk3', type = 'u8', default = 0, ver = 4 },  --/ SCoP
	
	{ name = 'skeleton_name',  type = 'sz',  default = '$editor', hook = 'idle' },
	{ name = 'skeleton_flags', type = 'u8',  default = 0  },
	{ name = 'source_id',      type = 'h16', default = -1 },
		
	{ name = 'bones_mask',     type = 'u8v8',  default = {0,0,0,0,0,0,0,0} },
	{ name = 'root_bone',      type = 'u16',   default = 0                 },
	--[[	{ name = 'bbox_min',       type = 'f32v3', default = vector()          },
	{ name = 'bbox_max',       type = 'f32v3', default = vector()          },
	{ name = 'bones_count',    type = 'u16',   default = 0                 }, --/#~# changed name ('bone_count')

	{ name = 'ph_position',    type = 'q8v3',  default = {0,0,0},  },
	{ name = 'ph_rotation',    type = 'q8v4',  default = {0,0,0,0} },
	{ name = 'enabled',        type = 'b8',    default = true      }, --/#~# changed type 'u8'

	{ name = 'holder_id',             type = 'h16', default = -1 },

	{ name = 'actor_state',           type = 'h16' },
	{ name = 'actor_accel_header',    type = 'h16' },
	{ name = 'actor_accel_data',      type = 'h32' },
	{ name = 'actor_velocity_header', type = 'h16' },
	{ name = 'actor_velocity_data',   type = 'h32' },
	{ name = 'actor_radiation',       type = 'f32' },
	{ name = 'actor_weapon',          type = 'u8'  },
	{ name = 'num_items',             type = 'u16' } --/#?#
	]]
	}
	
	local act = alife():object(0)
	
	local packet = net_packet()
	act:STATE_Write(packet)
	local str = ""
	for _, v in ipairs(c) do
		str = str.."\n"..  v.name..": ".. tostring(m_netpk['_r_'..v.type](packet) ) 
	end
	nt.logfile(str)
end

 

Всё работает, но до первого вектора!


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites
Graff46    446

@Graff46, Всё работает! Просто конструкция tostring([ type: userdata]) не допустима в Луа, пришлось добавить условие:

local str = ""
	local dd = ""
	for _, v in ipairs(c) do
		dd = m_netpk['_r_'..v.type](packet)
		if type(dd) == "userdata" then dd = "userdata" end -- Вот условие
		str = str.."\n"..  v.name..": ".. tostring(dd) 
	end
	nt.logfile(str)

 


fe2f085fa6ec930af82f5856df7e561b.jpg

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.


  • Recently Browsing   0 members

    No registered users viewing this page.

AMK-Team.ru

×
×
  • Create New...