Старлей 88 Опубликовано 28 Сентября 2013 Поделиться Опубликовано 28 Сентября 2013 (изменено) 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. Удалил ограничение все нормально стало с "отдачей" предмета. Изменено 28 Сентября 2013 пользователем Старлей Ray Of Hope - кооператив сталкера OldStory Ссылка на комментарий
Artos 99 Опубликовано 28 Сентября 2013 Поделиться Опубликовано 28 Сентября 2013 (изменено) @Старлей, мною дан все же скрипт из набора (т.е. ориентирован на работу в комплекте), который еще только подготавливаю к публикации, но из которого уже можно использовать большинство наработок (немного подумав и порою кое-где подстроив под-себя). Кастрировать функции не рекомендовал бы, т.к. функции данного скрипта позиционируются как "общие", т.е. для самых различных ситуаций и решения разных задач. Получив в локальной ситуации желаемый результат, усеченная функция будет "врать/ошибаться" в каких-то других. Тебе проще взять отдельную функцию и, увидев непонятную переменную 'idActor' посмотреть в этом же скрипте что она означает и заменить на db.actor:id(), тем самым и получив результат и сохранив весь функционал. А вообще, обновил этот скрипт (архив), пополнив описание и добавив ему автономности. Изменено 28 Сентября 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Карлан 1 049 Опубликовано 30 Сентября 2013 Поделиться Опубликовано 30 Сентября 2013 (изменено) Такой вопрос, есть строка вида(в конфиге): items = medkit, 2, antirad, 3, kolbasa, 2 Как из нее получить строку вида: string = "medkit(2),antirad(3),kolbasa(2)" Доколе работал с таблицами, там делал так: формировал строку с рандомнымиитемами, потом формировал из строки таблицу,сохранял таблицу, потом загружал таблицу и разделял таблицу по сепаратору обратно в строку.Тут вроде операций поменьше должно быть... По сути я так думаю надо написать функцию с циклом и туда передавать нашу строку, т.е. перебирать строку с шагом в "1", проверять следующий итем строки, если это слово, то продолжаем, если цифра то ставим сепаратор и продолжаем... как-то вот так. Пока смутно представляю как сделать. Как вариант пробовать как обычно, получаем строку в виде массива и разбираем его с помощью explode по нужному сепаратору, меняя позиции для цифр с помощью string.sub. Изменено 30 Сентября 2013 пользователем Карлан Ссылка на комментарий
ColR_iT 171 Опубликовано 1 Октября 2013 Поделиться Опубликовано 1 Октября 2013 (изменено) Как-то так: 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) Изменено 1 Октября 2013 пользователем ColR_iT Ссылка на комментарий
Viнt@rь 50 Опубликовано 5 Октября 2013 Поделиться Опубликовано 5 Октября 2013 (изменено) Имею строку: "sname:=sname2:asdasd" Нужно разбить строку и вытащить из нее все, что написано после := (в данном контексте это начиная со второго слова после равно и до конца строки) при этом строка может иметь и такой вид "sname=sname2:asdasd" и такой "sname:sname2:asdasd". Разбить строку у меня получилось - sName:match('[^=:]+') видно с помощью какого шаблона В последствии получаю на выходе "sname". А вот как получить вторую часть строки применяя такой же шаблон(ну или какой то другой) - хз, пробовал множество вариаций паттернов, но не получается, добился только возврата последнего слова из строки... Прошу помощи у знающих(было раньше разобрался с этими регулярными выражениями, сделал, что надо, и не занимался ими, в итоге - забыл как и что) ЗЫ как это сделать используя gmatch(использование в цикле) я знаю, так же знаю, что можно разделить используя комбинацию find sub Изменено 5 Октября 2013 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
*Shoker* 322 Опубликовано 5 Октября 2013 Поделиться Опубликовано 5 Октября 2013 (изменено) Толи в этой теме, то ли в "Общих вопросах по 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 вдруг не существует. Вот я недавно опять же такой словил пару раз и задумался, может ли это быть связано с тем, что объект вдруг удалился, а ссылка на него где то существует, или это что то другое? Никто вообще не разбирал детали такого вылета?Да и вообще вопрос о безопасности хранения прямых ссылок на движковые объекты. Изменено 5 Октября 2013 пользователем *Shoker* Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Artos 99 Опубликовано 5 Октября 2013 Поделиться Опубликовано 5 Октября 2013 (изменено) @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) клиентских объектов. Итого, без причины не увлекайтесь созданием "долгоиграющих" линков на объекты. Безопаснее хранить идентификатор, перепроверяя его актуальность и по которому не сложно получить собственно нужный объект. Хотя и тут подводный камень, т.к. идентификатор удаленного объекта запросто может быть занять другим игровым объектом, но это уже иная история... ;-) Изменено 5 Октября 2013 пользователем Artos 2 "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
*Shoker* 322 Опубликовано 6 Октября 2013 Поделиться Опубликовано 6 Октября 2013 @Artos, спасибо за ответ. По наводке как раз нашёл нужный пост. Можно просто Shoker, форум АМК съел моё старое имя и не хочет отдавать о_О Мастер аномалий на свою заднюю точку. Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Октября 2013 Поделиться Опубликовано 6 Октября 2013 Странное и загадочное: -- v_lin, v_ang = vector(), vector() ps:get_linear_vel( v_lin ) ps:get_angular_vel( v_ang ) Если строку с присвоением нулевого вектора раскомментировать, все работает как надо. Вот так - не понятно как, но как-то совсем не так. Переменные типа vector() объявлены глобально. Что это, Бэрримор ? P.S. вообще, с нотацией у операций с векторами какой-то мрак и ужас. Что-то - возвращает, что-то - заполняет переданное, что-то возвращает результат операции, что-то - модифицирует полученное, и его же возвращает... Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
Artos 99 Опубликовано 6 Октября 2013 Поделиться Опубликовано 6 Октября 2013 (изменено) @Dennis_Chikin, если не обращать внимания на контекст - то и не будет понятно... Твой пример вероятно выдран из скрипта мода "грави-пушки" (by Malandrinus & Kirag) и 'ps' - является объектом ( ps = obj:get_physics_shell() ) к которому применимы методы его класса ('physics_shell'). А заглянув в азбуку мододела (lua_help.script) иль в соотв.топик, можно увидеть какие аргументы потребны для работы с соотв.функцией/методом этого класса. 'Глобальное' определение переменных в данном случае оправдано, т.к. это применяется в биндере гравипушки и переменные используются в разных методах биндера. Нет под рукою исходных скриптов, но мною используются как 'self.lvel' и 'self.avel' (линейная и угловая скорости), т.е. "ограниченная глобальность". ;-) Ну а с нотациями у разрабов игры туго не только с векторами... Изменено 6 Октября 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 6 Октября 2013 Поделиться Опубликовано 6 Октября 2013 (изменено) Да, оттуда. Впрочем, понял: моя ошибка. Здесь как раз все нормально, хоть с закомментированной строкой, хоть с раскомментированной. Я не отследил, что старые значения сохраняются не 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 Изменено 6 Октября 2013 пользователем Dennis_Chikin Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
proper70 74 Опубликовано 7 Октября 2013 Поделиться Опубликовано 7 Октября 2013 Господа, подскажите, можно ли как-то проверить, что ГГ убил непися именно хедшотом? Т.е. смертельный выстрел попал в кость головы (bip01_head)? В мотиваторе в hit_callback передается кость, по которой прошел хит, а в death_callback - нет. Можно ли как-то решить эту задачу? Ссылка на комментарий
Artos 99 Опубликовано 7 Октября 2013 Поделиться Опубликовано 7 Октября 2013 @proper70, подсказка: 1. Смертельный хит (его коллбэк) всегда предшествует смерти (коллбэку). 2. В схеме хита (xr_hit.scrip) в сторадж неписю (db.storage[self.object:id()]) при каждом коллбэке записывается/обновляется табличка 'hit', куда заносится идентификатор обидчика. 3. В ЗП, в эту же табличка добавляется запись 'deadly_hit', т.е. смертельный ли хит. 4. Ни что не мешает добавить в эту же табличку (иль еще куда) информацию о кости (bone_index) и уже в коллбэке смерти читать табличку 'hit' и определять от кого и от чего погиб... "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
proper70 74 Опубликовано 7 Октября 2013 Поделиться Опубликовано 7 Октября 2013 (изменено) Artos, попробовал. Да, так работает, только у неписей bone_index при любом хите всегда = 0. Похоже в ТЧ этот параметр просто не обрабатывается. И я не нашел ни одного использования этого параметра в чистом ТЧ и в Солянке. Этот параметр просто передается из функции в функцию, гуляя по логике и калбекам, но нигде не проверяется на значение... Изменено 7 Октября 2013 пользователем proper70 Ссылка на комментарий
Viнt@rь 50 Опубликовано 7 Октября 2013 Поделиться Опубликовано 7 Октября 2013 (изменено) 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 не стал бы городить более менее рабочий модуль новостей, с обработкой куда(в какую кость/часть тела) попали) Изменено 7 Октября 2013 пользователем Viнt@rь GUI для конвертера от бардака(всего и вся в форматы сдк) Полезный утиль-"Utilits pack(mod)" Ссылка на комментарий
Artos 99 Опубликовано 8 Октября 2013 Поделиться Опубликовано 8 Октября 2013 (изменено) только у неписей bone_index при любом хите всегда = 0 Абсолютно ложное утверждение! То, что в чистом ТЧ чего-то не используется - не аргумент, там много чего не используется. А ссылка на Солянку - улыбает. ;-) Даже для монстров в далеком 2008-м уже были сделаны моды на "умное выпадение частей" при отстреле по костям... Совет(ы): 1. Проверь, а тот ли аргумент ты обрабатываешь? 2. Перепроверь, не подменяешь ли где-то в своих кодах это значение... (тем более если у тебя Солянка). 3. Загляни в коды ЗП, в которых уже по твоей хотелке почти все сделано. а портировать можно напрямую ( по-сути все совместимо). Изменено 8 Октября 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 8 Октября 2013 Поделиться Опубликовано 8 Октября 2013 +1 к выше про кости. Тем более как раз недавно правил нечто подобное как раз в соли. Еще можно посмотреть там же bind_monster на предмет кода с попаданием кровососу в голову. Код точно рабочий, и точно работает. Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
proper70 74 Опубликовано 8 Октября 2013 Поделиться Опубликовано 8 Октября 2013 Господа! Всё, что вы написали выше, про умное выпадение и прочее - это всё относится к монстрам. А я спрашивал про неписей. То, что для монстров кость передается, я даже проверять не буду - по скриптам видно, что она обрабатывается и работает. А вот для неписей - она всегда = 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:0sv 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:0sv 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 servercl 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:0sv 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:0sv 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:0sv 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 servercl 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 Как видно из лога - кость не работает. Я стрелял по разным частям тела, рукам, ногам, туловищу, взрывал неписей гранатами - результат один) Ну да ладно) я могу обойтись без этого, просто хотел кое-что сделать по неписям, но обойдусь без него)) Ссылка на комментарий
Artos 99 Опубликовано 8 Октября 2013 Поделиться Опубликовано 8 Октября 2013 (изменено) Бессмысленно убеждать того, кто не хочет этого и не хочет думать... Нет НИКАКОЙ разницы в аргументах коллбэков, возвращаемых для неписей (гуманоидов) иль монстров иль даже физических объектов. Вот только ты думать не хочешь или проверить, когда что возвращается. Вот тебе лог по-сути с чистой игры ТЧ: * 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. "Пустой" хит - зацепился за что-то, веткой хлестнуло, щепка отлетела... т.е. не пуля/осколок/коготь/кислота/... Изменено 8 Октября 2013 пользователем Artos "Но иногда найдется вдруг чудак, этот чудак все сделает не так ..."© Машина времени Ссылка на комментарий
proper70 74 Опубликовано 8 Октября 2013 Поделиться Опубликовано 8 Октября 2013 (изменено) Artos, последний вопрос: как может быть хит "пустой" (amount=0), если непись погиб от одного-единственного выстрела в голову? Из ствола актора. При этом он стоял на абсолютно ровной открытой местности, т.е. ни за что не цеплялся, и погиб именно от пули актора? А у меня во вчерашнем, более полном тесте, также, как и у тебя, amount практически везде = 0, и это при том, что я зачистил весь АТП - более 15 бандитов? Они все что, погибли, споткнувшись об ветки?) Или я все ещё чего-то не понимаю, а в ТЧ хит калбек работает правильно, и amount=0 в момент, когда непись погибает - это именно так и должно быть? Изменено 8 Октября 2013 пользователем proper70 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти