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

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

Artos
Установил твой lua_helper, пытаюсь вызвать функцию:


Relocate_Items(npc, phraseID, 2)
Relocate_Items(npc, sect, 1, "in")

Получаю вылет:

 

 

Expression : fatal error
Function : CScriptEngine::lua_error
File : E:\priquel\sources\engine\xrServerEntities\script_engine.cpp
Line : 180
Description : 
Arguments : LUA error: ...stalker clear sky\gamedata\scripts\lua_helper.script:45: attempt to call field 'exformat' (a nil value)

 

 

 

Но суть не в этом, вылет происходит из-за этой строчки 1324 там printf вызывается, так ведь предметы то не передаются!

Получается что предмет ГГ не проходит условие

if soItem and not oActor:marked_dropped(oItem) and oItem:parent() and oItem:parent():id() == idActor then

=======
 

P.S. Удалил ограничение все нормально стало с "отдачей" предмета.

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

@Старлей, мною дан все же скрипт из набора (т.е. ориентирован на работу в комплекте), который еще только подготавливаю к публикации, но из которого уже можно использовать большинство наработок (немного подумав и порою кое-где подстроив под-себя).

Кастрировать функции не рекомендовал бы, т.к. функции данного скрипта позиционируются как "общие", т.е. для самых различных ситуаций и решения разных задач. Получив в локальной ситуации желаемый результат, усеченная функция будет "врать/ошибаться" в каких-то других.

Тебе проще взять отдельную функцию и, увидев непонятную переменную 'idActor' посмотреть в этом же скрипте что она означает и заменить на db.actor:id(), тем самым и получив результат и сохранив весь функционал.

 

А вообще, обновил этот скрипт (архив), пополнив описание и добавив ему автономности.

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Такой вопрос, есть строка вида(в конфиге):

items = medkit, 2, antirad, 3, kolbasa, 2

Как из нее получить строку вида:

string = "medkit(2),antirad(3),kolbasa(2)"

Доколе работал с таблицами, там делал так: формировал строку с рандомнымиитемами, потом формировал из строки таблицу,сохранял таблицу, потом загружал таблицу и разделял таблицу по сепаратору обратно в строку.Тут вроде операций поменьше должно быть... По сути я так думаю надо написать функцию с циклом и туда передавать нашу строку, т.е. перебирать строку с шагом в "1", проверять следующий итем строки, если это слово, то продолжаем, если цифра то ставим сепаратор и продолжаем... как-то вот так. Пока смутно представляю как сделать. Как вариант пробовать как обычно, получаем строку в виде массива и разбираем его с помощью explode по нужному сепаратору, меняя позиции для цифр с помощью string.sub.

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

Как-то так:

 

function Parsing (section, field)
    local ini = system_ini()
    local strValue = ini:section_exist(section) and ini:line_exist(section, field) and ini:r_string(section, field)
    local needString = ""
    if not strValue then return end
    local _table = parse_names(strValue)
    for i = 1, #_table, 2 do
        needString = needString.._table[i].."(".._table[i+1].."),"
    end
    return string.sub(needString,1,#needString-1)
end
Немного небрежно, но, так сказать, на скорую руку.

В качестве section передавать секцию из .ltx файла, в которой находится нужное тебе поле; field - собственно само поле (в твоём случае это items.

 

 

Или ещё вот такой вариант, имхо куда лучше:

local s = "medkit, 25, antirad, 3,bread, kolbasa"

-- удаляем пробельные символы
local t = s:gsub("%s","")

-- заменяем найденные комбинации вида ",число" на "(число)"
t = t:gsub(",(%d+)","(%1)")

-- если количество не указано, т.е. перед запятой не скобка
-- меняем комбинацию "символ," на "символ(1),"
t = t:gsub("([^%)]),","%1(1),")

-- если количество не указано для последней секции, то просто добавим к строке"(1)"
if not t:find("%)$") then t = t.."(1)" end

print(t) --> medkit(25),antirad(3),bread(1),kolbasa(1) 

 

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

Имею строку: "sname:=sname2:asdasd"

 

Нужно разбить строку и вытащить из нее все, что написано после := (в данном контексте это начиная со второго слова после равно и до конца строки) при этом строка может иметь и такой вид "sname=sname2:asdasd" и такой "sname:sname2:asdasd".

Разбить строку у меня получилось - sName:match('[^=:]+') видно с помощью какого шаблона :) В последствии получаю на выходе "sname".

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

 

ЗЫ как это сделать используя gmatch(использование в цикле) я знаю, так же знаю, что можно разделить используя комбинацию find sub

Изменено пользователем Viнt@rь
Ссылка на комментарий

Толи в этой теме, то ли в "Общих вопросах по Lua" этот вопрос когда то обсуждался кажется Artos-ом, да что то поиском ничего не смог найти.

Вопрос насчёт хранения ссылок в Lua или даже в Lua-Bind-е, приведу пример из игры.

 

Допустим в игре я получил lua-биндовский объект (сталкера, оружие, да что угодно) и занёс ссылку на этот объект в таблицу.

local tbl = {}

local obj = level.object_by_id(,,,) - получили онлайновый объект

tbl.cur_obj = obj - занесли ссылку на него в таблицу

Далее в процессе игры мой объект удаляется (как серверный) или переходит в оффлайн и его клиентский объект (на который ссылается obj) где то там в движке уничтожается (?). Тогда по идее по tbl.cur_obj у меня тоже должен хранится, и обычно вроде как и будет, nil.

 

Но всегда ли это верно? Может ли быть так, что после удаления объекта где то в движке, ссылка на него всё ещё может быть активной в течении одного\двух циклов?

 

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

 

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

Да и вообще вопрос о безопасности хранения прямых ссылок на движковые объекты. 

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

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

@Viнt@rь, вообще-то чтобы себе и другим не городить проблемы/головоломки, стОит подобные строки, требующие распарсивания, создавать придерживаясь шаблона, а не "может быть таки, иль эдак, иль еще как-нить..." .

Основное при решение подобных задачек: определить критерии/признаки, по которым и создаются патерны, удовлетворяющие всем критериям во всех ситуациях.

Судя по тому что ты описал, можно говорить о следующих основных критериях:

- 1-й обязательный разделитель содержит символ(ы) ':' и/или '=' , т.е. один из или оба символа

- 2-й обязательный разделитель содержит символ ':'

итого имеем что-то типа:

s1,s2,s3 = str:match('%s*([^=|:]+)%p*([^:]+)%p*(.*)')

- написано для одновременного разбиения строки по двум разделителям. Если не потребно - слить всегда проще...

Также, тобою не оговорена возможность наличия в словах символа '_' (подчеркивания), что может потребовать усложнения, т.е. замены '%p' на более сложный, исключающий символ подчеркивания, или оперировать для слов: '[%w|_]'.

Ну и т.д. ... можно подумать о пробелах внутри и в конце и др.условиях, наличие которых только тебе ведомо.

 

@*Shoker*, тема не простенькая, и в первую очередь нужно не употреблять невнятный жаргонарий... Например, говоря об игровом объекте (obj = level.object_by_id(,,,) - получили онлайновый объект) не ставить телегу впереди лошади: "существует объект, к которому биндер присвоен". В данном случае, биндер - объект класса, а obj - является свойством биндера, хотя и порожден движком. Если это понять, то легче будет и далее понимать...

Итого, имеем примерно это (применительно, например, к сталкеру/монстру):

- Движок создает клиентский объект, который передается в биндер (биндится).

- Класс биндера создает объект (который часто обзывают биндером), завязывая на одно из своих свойств 'self.object' переданный ему клиентский объект.

- ... в игре, оперируя методами биндера, мы автоматом работаем с присвоенном ему клиентским объектом: апдейты, коллбэки и т.п.

 

Ну а теперь что произойдет, если запомнить 'self.object' (aka 'obj') где-то в табличке иль ином месте?

Ярким примером этого - присвоение db.storage[npc:id()].enemy = enemy (!!!) в xr_combat_ignore.script и последующая работа во многих скриптах с этим линком. Линк естественно будет ссылаться на клиентский объект.

Ну а теперь, в игре этого сталкера удалили иль телепортировали на др.локацию. Естественно срабатывает метод биндера xxx_binder:net_destroy() , который НЕ удаляет клиентский объект(!), а разрушает связь этого объекта с биндером. С этого момента уже проблематично что-либо сделать с объектом, не получив ошибки, не говоря уже о том, что сборщик мусора вскорости удалит отживший свое объект класса биндера. Сам клиенский объект может и существовать некоторое время, если связан линком, вот только толку от него никакого (биндер уже не апдейтит его), а только вред.

Применительно к практике, в этом топике уже обсуждалась порочность создания таких линков на объекты (на примере упомянутого выше enemy), и желательности замены их на идентификаторы (id) клиентских объектов. 

 

Итого, без причины не увлекайтесь созданием "долгоиграющих" линков на объекты. Безопаснее хранить идентификатор, перепроверяя его актуальность и по которому не сложно получить собственно нужный объект. Хотя и тут подводный камень, т.к. идентификатор удаленного объекта запросто может быть занять другим игровым объектом, но это уже иная история... ;-)

Изменено пользователем Artos
  • Нравится 2

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

@Artos, спасибо за ответ. По наводке как раз нашёл нужный пост

Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О

Мастер аномалий на свою заднюю точку.

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

Странное и загадочное:

-- v_lin, v_ang = vector(), vector()

ps:get_linear_vel( v_lin )

ps:get_angular_vel( v_ang )

 

Если строку с присвоением нулевого вектора раскомментировать, все работает как надо. Вот так - не понятно как, но как-то совсем не так.

Переменные типа vector() объявлены глобально.

 

Что это, Бэрримор ?

 

P.S. вообще, с нотацией у операций с векторами какой-то мрак и ужас. Что-то - возвращает, что-то - заполняет переданное, что-то возвращает результат операции, что-то - модифицирует полученное, и его же возвращает...

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

@Dennis_Chikin, если не обращать внимания на контекст - то и не будет понятно...

Твой пример вероятно выдран из скрипта мода "грави-пушки" (by Malandrinus & Kirag) и 'ps' - является объектом ( ps = obj:get_physics_shell() ) к которому применимы методы его класса ('physics_shell'). А заглянув в азбуку мододела (lua_help.script) иль в соотв.топик, можно увидеть какие аргументы потребны для работы с соотв.функцией/методом этого класса.

'Глобальное' определение переменных в данном случае оправдано, т.к. это применяется в биндере гравипушки и переменные используются в разных методах биндера. Нет под рукою исходных скриптов, но мною используются как 'self.lvel' и 'self.avel' (линейная и угловая скорости), т.е. "ограниченная глобальность". ;-)

Ну а с нотациями у разрабов игры туго не только с векторами...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Да, оттуда. Впрочем, понял: моя ошибка. Здесь как раз все нормально, хоть с закомментированной строкой, хоть с раскомментированной. Я не отследил, что старые значения сохраняются не v:set() (заполнением), а копированием ссылки. Везде исправил, а сохранение - нет. И в приведенном коде - затираются новыми.

 

Исправил монстрометод на вот такое:

function track_item()
	local item = thrown_id and lobj_by_id( thrown_id )
	local pos, ps
	if item then
		pos = item:position()
		-- if check_on_level( pos ) then
		if level.get_bounding_volume().min.y < pos.y then ps = item:get_physics_shell()
		else
			local obj = sim:object( thrown_id )	-- улетел за пределы уровня, удаляем
			if obj then sim:release( obj, true ) end
	end	end

	if ps and ( thrown_upd >= global_time_ms ) then
		-- v_lin, v_ang = vector(), vector()	-- странное и загадочное, но иначе не работает
		ps:get_linear_vel( v_lin )
		ps:get_angular_vel( v_ang )
		if not lv_lin then	-- летим
			lv_lin, lv_ang = vector():set( t_impulse ), vector():set( v_ang )
			return
		end

		local cos_l = vector():set( v_lin ):normalize():dotproduct(
			vector():set( lv_lin ):normalize() )

		-- ловим удар брошенного предмета обо что-либо
		if ( cos_l < 0.86 or ( cos_l < 0.99 and pos:distance_to_sqr( dev.cam_pos ) >= 9 ) )
			-- основной показатель удара - изменение направления вектора линейной скорости
		  and v_ang:magnitude() ~= 0 and ( lv_ang:magnitude() == 0
		    or vector():set( v_ang ):normalize():dotproduct(
			vector():set( lv_ang ):normalize() ) < 0.99 ) then
			local sect = item:section()
			if string_find( sect, "explosive" ) then item:explode()
			elseif string_sub( sect, 1, 3 ) == "af_" then
				af_activate( sect, pos, thrown_id )
			end
			-- все, упали
		else lv_lin:set( v_lin ); lv_ang:set( v_ang ); return	-- продолжаем лететь
	end	end
	thrown_id, thrown_upd = false, 0
	lv_lin = false
end

 

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

Господа, подскажите, можно ли как-то проверить, что ГГ убил непися именно хедшотом? Т.е. смертельный выстрел попал в кость головы (bip01_head)? В мотиваторе в hit_callback передается кость, по которой прошел хит, а в death_callback - нет. Можно ли как-то решить эту задачу?

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

@proper70, подсказка:

1. Смертельный хит (его коллбэк) всегда предшествует смерти (коллбэку).

2. В схеме хита (xr_hit.scrip) в сторадж неписю (db.storage[self.object:id()]) при каждом коллбэке записывается/обновляется табличка 'hit', куда заносится идентификатор обидчика.

3. В ЗП, в эту же табличка добавляется запись 'deadly_hit', т.е. смертельный ли хит.

4. Ни что не мешает добавить в эту же табличку (иль еще куда) информацию о кости (bone_index) и уже в коллбэке смерти читать табличку 'hit' и определять от кого и от чего погиб...

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos, попробовал. Да, так работает, только у неписей bone_index при любом хите всегда = 0. Похоже в ТЧ этот параметр просто не обрабатывается. И я не нашел ни одного использования этого параметра в чистом ТЧ и в Солянке. Этот параметр просто передается из функции в функцию, гуляя по логике и калбекам, но нигде не проверяется на значение...

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

proper70, посмотри как сделано у АМК 2.0 в модуле новостей, вот функция из amkII

function amkGetRegion(iBone) 
   if iBone == 14 or iBone == 15 then   
      return "Eye" 
   elseif iBone == 16 or iBone == 13 then   
      return "Head" 
   elseif iBone == 17 then   
      return "Neck" 
   elseif iBone == 9 or iBone == 10 or iBone == 11 or iBone == 18 then   
      return "Spine" 
   elseif iBone >= 1 and iBone <= 8 then   
      return "Leg" 
   elseif iBone >= 19 and iBone <= 42 then   
      return "Hand" 
   end 
   return nil 
end

 

 

И нормально там все аргументы(параметры) передаются(обрабатываются) иначе, по логике вещей, Refresh не стал бы городить более менее рабочий модуль новостей, с обработкой куда(в какую кость/часть тела) попали)

Изменено пользователем Viнt@rь
Ссылка на комментарий
только у неписей bone_index при любом хите всегда = 0

 

Абсолютно ложное утверждение! То, что в чистом ТЧ чего-то не используется - не аргумент, там много чего не используется. А ссылка на Солянку - улыбает. ;-) Даже для монстров в далеком 2008-м уже были сделаны моды на "умное выпадение частей" при отстреле по костям...

Совет(ы):

1. Проверь, а тот ли аргумент ты обрабатываешь?

2. Перепроверь, не подменяешь ли где-то в своих кодах это значение... (тем более если у тебя Солянка).

3. Загляни в коды ЗП, в которых уже по твоей хотелке почти все сделано. а портировать можно напрямую ( по-сути все совместимо).

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

+1 к выше про кости.

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

Еще можно посмотреть там же bind_monster на предмет кода с попаданием кровососу в голову. Код точно рабочий, и точно работает.

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

Господа! Всё, что вы написали выше, про умное выпадение и прочее - это всё относится к монстрам. А я спрашивал про неписей. То, что для монстров кость передается, я даже проверять не буду - по скриптам видно, что она обрабатывается и работает. А вот для неписей - она всегда = 0. Убедиться в этом очень просто:  в мотиваторе в самом начале hit_callback напишите вот это:

 

get_console():execute("load ~~~ npc: "..self.object:name().." bone_index:"..bone_index)

 

и постреляйте по неписям по разным частям их тела. Сами всё увидите) Вот вырезка из моего лога, когда я воевал с бандитами на АТП:

 

 

! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_125265 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_125265 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~ spawn now [respawn30856] -> [ghoul_strong24093]
! Cannot find saved game ~ spawn now [respawn30856] -> [m_poltergeist_strong_flame24198]
! Cannot find saved game ~ spawn now [respawn30856] -> [ghoul_strong24200]
sv reject. id_parent [0][actor:single_player] id_entity [4278][ammo_9x39_sp5:ammo_9x39_sp54278] [9134]
sv destroy object [4278][ammo_9x39_sp5:ammo_9x39_sp54278] [9134]
cl setDestroy [4278][9135]
sv destroy object [24130][separator:separator24130] [9136]
sv reject. id_parent [0][actor:single_player] id_entity [24130][separator:separator24130] [9136]
cl setDestroy [24130][9136]
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_125265 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_125265 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
sv reject. id_parent [29318][atp_fabrika_bandit_respawn_1:atp_fabrika_bandit_respawn_129318] id_entity [13492][ammo_5.45x39_ap:ammo_5.45x39_ap] [9219]
sv destroy object [13492][ammo_5.45x39_ap:ammo_5.45x39_ap] [9219]
cl setDestroy [13492][9220]
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: val_bandit_respawn_438920 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
sv destroy object [9506][grenade_rgd5:grenade_rgd59506] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [9506][grenade_rgd5:grenade_rgd59506] [9230]
sv destroy object [14883][grenade_f1:grenade_f114883] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [14883][grenade_f1:grenade_f114883] [9230]
sv destroy object [9366][yad:yad9366] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [9366][yad:yad9366] [9230]
sv destroy object [9323][bandage:bandage9323] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [9323][bandage:bandage9323] [9230]
sv destroy object [9396][medkit:medkit9396] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [9396][medkit:medkit9396] [9230]
sv destroy object [38915][device_pda:device_pda38915] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [38915][device_pda:device_pda38915] [9230]
sv destroy object [38923][ammo_5.56x45_ap:ammo_5.56x45_ap38923] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [38923][ammo_5.56x45_ap:ammo_5.56x45_ap38923] [9230]
sv destroy object [38947][device_torch:device_torch38947] [9230]
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [38947][device_torch:device_torch38947] [9230]
sv destroy object [38923][NOTFOUND] [9230]
!SV:ge_destroy: [38923] not found on server
cl setDestroy [9506][9231]
cl setDestroy [14883][9231]
cl setDestroy [9366][9231]
cl setDestroy [9323][9231]
cl setDestroy [9396][9231]
cl setDestroy [38915][9231]
cl setDestroy [38923][9231]
cl setDestroy [38947][9231]
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
sv reject. id_parent [38920][val_bandit_respawn_4:val_bandit_respawn_438920] id_entity [38948][wpn_l85:wpn_l8538948] [9232]
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
sv reject. id_parent [29339][atp_fabrika_bandit_respawn_1:atp_fabrika_bandit_respawn_129339] id_entity [21405][ammo_5.45x39_fmj:ammo_5.45x39_fmj] [9305]
sv destroy object [21405][ammo_5.45x39_fmj:ammo_5.45x39_fmj] [9305]
cl setDestroy [21405][9306]
sv reject. id_parent [29339][atp_fabrika_bandit_respawn_1:atp_fabrika_bandit_respawn_129339] id_entity [24462][grenade_rgd5_test:grenade_rgd5_test24462] [9439]
sv reject. id_parent [29339][atp_fabrika_bandit_respawn_1:atp_fabrika_bandit_respawn_129339] id_entity [24463][grenade_rgd5_test:grenade_rgd5_test24463] [9439]
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: agr_bandit_respawn_138926 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
sv destroy object [9372][yad:yad9372] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [9372][yad:yad9372] [9456]
sv destroy object [9400][medkit:medkit9400] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [9400][medkit:medkit9400] [9456]
sv destroy object [9401][bandage:bandage9401] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [9401][bandage:bandage9401] [9456]
sv destroy object [38927][device_pda:device_pda38927] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [38927][device_pda:device_pda38927] [9456]
sv destroy object [38959][ammo_12x70_buck:ammo_12x70_buck38959] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [38959][ammo_12x70_buck:ammo_12x70_buck38959] [9456]
sv destroy object [38961][device_torch:device_torch38961] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [38961][device_torch:device_torch38961] [9456]
sv destroy object [38962][guitar_a:guitar_a38962] [9456]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [38962][guitar_a:guitar_a38962] [9456]
sv destroy object [38959][NOTFOUND] [9456]
!SV:ge_destroy: [38959] not found on server
cl setDestroy [9372][9457]
cl setDestroy [9400][9457]
cl setDestroy [9401][9457]
cl setDestroy [38927][9457]
cl setDestroy [38959][9457]
cl setDestroy [38961][9457]
cl setDestroy [38962][9457]
sv reject. id_parent [38926][agr_bandit_respawn_1:agr_bandit_respawn_138926] id_entity [38964][wpn_bm16:wpn_bm1638964] [9458]
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_232020 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129339 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_330071 bone_index:0
! Cannot find saved game ~~~ npc: atp_fabrika_bandit_respawn_129318 bone_index:0

Как видно из лога - кость не работает. Я стрелял по разным частям тела, рукам, ногам, туловищу, взрывал неписей гранатами - результат один)

Ну да ладно) я могу обойтись без этого, просто хотел кое-что сделать по неписям, но обойдусь без него))

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

Бессмысленно убеждать того, кто не хочет этого и не хочет думать...

Нет НИКАКОЙ разницы в аргументах коллбэков, возвращаемых для неписей (гуманоидов) иль монстров иль даже физических объектов.

Вот только ты думать не хочешь или проверить, когда что возвращается. Вот тебе лог по-сути с  чистой игры ТЧ:

 

* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.675] => hp=[0.325]:bone=[31] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[0.325]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit4],who=[single_player],amount=[0.000] => hp=[0.325]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit4],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.338] => hp=[0.662]:bone=[10])
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[0.662]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[0.662]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[0.662]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.068] => hp=[0.595]:bone=[21] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[0.595]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[0.595]:bone=[28] )
* DBG: _my:OnHit_NPC:=[esc_shustryi],who=[esc_factory_bandit_7],amount=[0.000] => hp=[1.000]:bone=[0] )
* DBG: _my:OnHit_NPC:=[esc_factory_bandit_7],who=[single_player],amount=[0.000] => hp=[0.595]:bone=[0] )

Тебе всего лишь нужно учитывать, что при "пустом" хите (amount=0) нет никакого попадания ни в какую кость - вот и имеешь в таких случаях bone=0.

"Пустой" хит - зацепился за что-то, веткой хлестнуло, щепка отлетела... т.е. не пуля/осколок/коготь/кислота/...

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

"Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени

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

Artos, последний вопрос: как может быть хит "пустой" (amount=0), если непись погиб от одного-единственного выстрела в голову? Из ствола актора. При этом он стоял на абсолютно ровной открытой местности, т.е. ни за что не цеплялся, и погиб именно от пули актора? А у меня во вчерашнем, более полном тесте, также, как и у тебя, amount практически везде = 0, и это при том, что я зачистил весь АТП - более 15 бандитов? Они все что, погибли, споткнувшись об ветки?) Или я все ещё чего-то не понимаю, а в ТЧ хит калбек работает правильно, и amount=0 в момент, когда непись погибает - это именно так и должно быть?

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

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

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

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

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

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

Войти

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

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

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