Карапузик
(разговаривал с Сяком и подзадержался с ответом)
Примечание для Gun12: речь идет о кодах в NLC6 (см. соответствующий) топик (конкретно пост; #1383954). Вот выжимка из удаленного поста Карапузик'а, относящаяся к делу:
Карапузик: В примере выше, вы якобы избежали зависания биндера, однако вы допустили целую кучу грубейших ошибок:
- вы не проверили, что у переменной obj есть метод id, в данном случае вы по-видимому считаете, что вылет и загрузка с дальнего сохранения это не страшно - ну что ж это ваше настоящее отношение к игрокам.
- вы не проверили, что полученный se_obj имеет класс патронов - это уже зависание биндера, но это же сложнее, чем дописать проверку на нил, и вы предпочли закрыть на это глаза.
Это только те грубейшие ошибки, что я увидел с первого взгляда. В остальных ваших фиксах их не меньше.
Есть две практики программирования: в одной считается, что в функцию передаются верные аргумента и в самой функции их проверять не надо- ее по-видимому придерживается Вергас; другая полагает что все переданные данные в функцию надо тщательно проверить - вы как раз об этом заявляете.
А это мой кусок удаленного комментария по сути:
Artos: 4. Нужно делать различия между минимальными правками, исправляющими критические ошибки и написанием безопасного кода для любых случаев применения. То, что вы называете 'грубейшими ошибками' - по контексту кода 'vergas_lib' осуществляется в взывающих функциях и действительно, в данном случае, как выразился Vergas, будет уже "некчемной", т.е. излишней тратой ресурсов/времени.
5. Есть еще третий случай, когда в функцию передаются верные данные, но эти данные могут или отсутствовать или даже быть устаревшими. Если для вас есть разница между серверным объектом и клиентским - вы поймете о чем ... Т.о. проверять уже требуется не стОль 'верность' данных, а их актуальность. Вот отсутствием именно этой особенности грешат многие участки кодов в NLC6 (да и конечно же и в других модах подобного не мало ...).
6. Цель моих правок: Дать информацию как игрокам, так и разработчикам о месте, наиболее явной ошибке и о варианте исправления. А уж как полностью будет каждый у себя править - это уже личное. Кто-то перебздит, а кто-то недо...
Ответ на прямой вопрос: "в каком месте НЛЦ6 и при каких условиях в этой функции будет неактуальный se_obj?"
СтОит посмотреть и вникнуть немного в первоисточник. Скрипт разгрузки и при ее вызове и манипуляциях с ней оперирует в том числе и патронами. Причем делает это в основном с клиетскими объектами и многое за один период апдейта актора. При своем вызове перечитываются различные данные/таблицы и в том числе происходит удаление объетов патронов из игры.
После чего (создания массивов) ... в том же периоде апдейта происходит уточнение текущих для разгрузки патронов и идут вызовы именно в эту функцию для определения кол-ва в пачке по каждой позиции.
Не стоит говорить о том, что удаление происходит также без доп.проверок и подстраховок, что и приводит к тому, что в некоем массиве остаются клиентские объекты (уж если быть точным - их юзердаты), но самх патронов (серверные объекты/юзердаты) уже удалены из игры.
При подобной попытке, используя имеющийся юзердату клиентского объекта патронов, глупо вопрошать о возможном отсутствии метода obj:id() у него. А вот получив этот ID - серверный объект по нему уже можно получить только при его фактическом наличии.
Если же серверный объект по ID патронов(!) получен, то глупо называть ошибкой и тем более грубой факт предварительной проверки наличия у такого объекта метода se_obj.id. Проверка не помешает ничему конечно, но и не будет сколь нибудь полезной.
Для вас лично я сделаю вариант аддона с кейлоггером на разгрузку, в котором и в лог выведу факт ошибки по "отсутствию" и отключу в биндре 'антиабортер', который не дает вам информации о наступившей фатальной ошибке. Хотя это может сделать почти любой, знакомый со скриптами.
Мною все зафиксированные ошибки были не домыслены, а обнаружены и при попытке прикрутить разгрузку к кейлоггеру и на чистом (распакованном) NLC6, с внесенными правками по выволу в лог. Хотя и без распаковки можно 'петровской' библиотекой прочитать в логе источник и причину ...
#Artos :
Для вас лично я сделаю вариант аддона с кейлоггером на разгрузку, в котором и в лог выведу факт ошибки по "отсутствию" и отключу в биндре 'антиабортер', который не дает вам информации о наступившей фатальной ошибке. Хотя это может сделать почти любой, знакомый со скриптами.
Мною все зафиксированные ошибки были не домыслены, а обнаружены и при попытке прикрутить разгрузку к кейлоггеру и на чистом (распакованном) NLC6, с внесенными правками по выволу в лог. Хотя и без распаковки можно 'петровской' библиотекой прочитать в логе источник и причину ...
Собственно я так и подумал, то эти затычки пошли в момент переделывания. То есть функцию стали вызывать, нарушив ее контракт. Это говорит только о том, что вы не до конца разобрались в логике работы разгрузки. То есть выходит, что в оригинальном вергасовском коде ошибок то и не было. Собственно я уже попроверял и этот фикс не сработал ни разу на оригинальной разгрузке. Конечно все случаи я охватить не мог, но гонял, как только смог выдумать.
RENTGEN_4444
Нет такого понятия 'активация' функции. Если и применяется - то это жаргон, для которого важен контекст.
При первичном считывании/парсинге кода скрипта (часто говорят инициализации кода/файла) происходит определение и переменных и функций в этом коде. Т.е. и переменные и функции становятся доступными для применения. Порой под 'активацией' понимают это.
При любом вызове функции по сути происходит ее 'активация', т.е. функция 'активна' и выполняет некие операции/алгоритмы.
Сделать, чтобы отдельная функция что-либо делала (активировалась бы) без ее вызова невозможно. Вариант звцикленной саму на себя исключаем.
Вот 'когда это требуется' и определяи и вызывай ее. За тебя, за коды, которые ты напишешь для этого, никто и ничто функции не 'активизирует'.
Карапузик
1. Естественно я не стал ждать когда при моем прохождении в очередной раз вывалится ошибка.
2. "нарушив ее контракт" - не смешите меня. То, что при непредусмотренном кодером вызове цепочки функций происходит ошибка - это тоже показатель качества кода. Но можно тут и не спорить и оставить право кодеру не усложнять код излишними проверками ...
3. Я же написал для невнимательных, что вылеты сам онаружил на чистом NLC6, и мой сын выдал мне для проверки/работы пяток вылетов (это и причина моего ковыряния) и десятки игроков, судя по топикам тех поддержки имеют фатальные и не очень ... проблемы с разгрузкой. Не факт конечно, что все они именно на эту ошибку наступали, но никто и не даст неголословной гарантии, что и эта ошибка имела место быть.
3. Не нужно делать из собеседника дурака и отказывать ему в понимании логики. Именно логика работы разгрузки имеет и изъяны, которые обусловлены отсутствием отдельных условий/проверок!
4. Смешно право, аргументы "я проверял безошибочный код и после с его правками" и не обнаружил срабатываний" Именно это и есть детская логика ;-) Код безошибочен - то и не сработает. Если правка все же исправила - какого же срабатывания вы хотели увидеть? :-G
Чувствую вы не по делу даже в техническом топике собираетесь разглагольствовать. Кроме словестной пустоты ни единого технического аргумента/обоснования. Флудить - тогда отправляйтесь .... в иное место.
(флуд на тему а имеет ли кто право "нарушать контракты функций" - закончен)
Stalker_Alex333
Эх, ты задаешь вопрос, который тысячи раз уже бывал в топиках разных модов ...
Суть ошибки:
Некий объект исчез из игры не убрав за собою 'хвосты', т.е. не отрегистировавшись во всех местах, которые выполняют или должны выполнять с ним определенные действия.
Простейший пример: сталкер иль монстр попадаетс в аномалию, аномалия его разрывает (объект мгновенно удаляется из игры), но ... тот же лут в труп иль хвост/копыто в тушку вроде как должны были заспавниться ... При совпадении некоторых условий и времени происходит попытка заспавнить или переложить предмет в уже несуществующий объект. e_entity - то, что должно быо быть предметом e_parent - то, что должно было быть 'владельцем/родителем' для предмета.
Подобная ошибка рандомна и довольно редка (зависит от кол-ва объектов на локации и проблемных мест/событий).
Лечить - или править движек или по мере возможности исключать подобные 'исчезновения'.
Всем категорическое Здравствуйте.
Скачал один из буржуйских модов, мало того, что он не идёт на мах.настройках графики (вылетает по собственным текстурам), так ещё и замучло вот это:
Открытие потока...
* phase time: 44 ms
* phase cmem: 273356 K
Загрузка формы объектов...
FATAL ERROR
[error]Expression : error handler is invoked!
[error]Function : handler_base
[error]File : E:\stalker\sources\trunk\xrCore\xrDebugNew.cpp
[error]Line : 749
[error]Description : std: out of memory
stack trace:
Происходит при сохранении или переходе на другую локацию. Вопрос в следующем: есть ли возможность это исправить без серьёзного вмешательства в структуру мода ?
Предвидя вопросы о размере физ. и вирт. памяти на машине, отвечу - RAM 3.0Гб, файл подкачки в четыре раза больше RAM.
Win-71.6 Simbion SHOC RC-11+Fix 2++Mini110630 Slayer_mod_STALKER_COP_beta_0.1?
Русская душа, как рубаха-заходи кто хош, бери чё хош !Тока водху НЕ ТРОЖ
[XXX]
; cse_abstract properties section_name = stalker;-- сталкер! name = esc_lager1;-- это его имя!
...
Ну и ищи 'своего'! Что тут сложного???
Если ты не включишь мозги - никто не поможет!
surik74
ИМХО, только серьезное вмешательстов с твое железо/систему/дрова и его настройки в частности видео-карты (а может и материнки) тебе смогут помочь.
Или же серьезные переделки мода, а точнее или его переоптимизиция или кастрирование.
Достаточный RAM конечно важен, но не менее важно то, как этот RAM используется. Если шины/контроллеры на материнке глюкавят, если видюха гниловата иль дрова на нее неудачные/ненастроенные - то и десяток гигов не помогут.
(но это уже тема для топиков по железу/софту и их оптимизации)
Stalker_Alex333
Помню, но ... извини и время никак не подберу ни ... НЕ в настроении :-G
Но вернемся к этому. P.S. к сожалению, немало тех, кто видит в этом желания повыпендриваться иль иное подобное ...
Но не будем об озабоченных тем, что их самих гложет ... :-)
Artos
В общем с железом всё более менее хорошо. (видеокарта+планки RAM новые, система оптимизированна, виртуальная память расположена в удобном для доступа к ней ОСи разделе харда). Тот же Симбион идёт, да и раньше, когда был похуже оптимизирован (у меня было гораздо меньше вылетов по стеку, чем у людей с более мощными машинами) на ура, да и другие объёмные моды тоже.
В общем спасибо за ответ, понял, что проще его (буржуйский мод) снести, но ещё попробую немного по шаманить/мучиться. Удачи. :-beer)
ЗЫ Не хотелось бы пить пиво прилипая губами к заледенелой кружке ;-), надеюсь ты понял о чём я. :victory
Win-71.6 Simbion SHOC RC-11+Fix 2++Mini110630 Slayer_mod_STALKER_COP_beta_0.1?
Русская душа, как рубаха-заходи кто хош, бери чё хош !Тока водху НЕ ТРОЖ
Ты бы дал ссылку (хоть в ПМ), может действительно мод виноват иль dll'ки ...
Ставить диагноз и давать рекомендации для больного не видя его самого и не пощупав(?) - даже Кашпировский примой телеканал использовал. ;-)
Gun12
Я было подумал, что некто начитавшись азбуки кодинга (и в обшем неплохо на первый взгляд), попытался прменить полученные знания на разборе конкретного фрагмента. И дабы не обсуждать в топике по моду технич. детали, предложил это сделать в этом топике.
Но ... ошибся малость, это оказался чуток подкованным "защитником", даже не разбирающимся. что к чему и откуда ошибки иль еще что растет.
Техническая то сторона для него оказалась неважна ... Ну и забудем об этом. :-)
Artos ,Карапузик
Понятно. Забираю свои слова назад.
Могу и вытереть.
Хотя пусть останется. Решать модераторам.
Может другие не будут "не по существу" заходить.
Я подумал что вопрос по теме "Вопросы и ответы"
А тут, оказывается, страсти по темам гулят :-)
surik74
Поверь, дело в железе.
отредактировал(а) Gun12: 16-11-2010 23:02 GMT3 час. Не стань номинантом премии Дарвина.
Вот думаю ... стоит ли порой вскрывать чужой гнойник иль ... пусть гноится?
veless
Давай ка по теме! Есть что конкретное сказать/обсудить/спросить - говорим, нет - со своей желчью, плз, изливай ее в другом месте (хотя бы в топике HLC6, ежели модератор не будет против).
Покажи ка в этом топике конкретно кодами или их толкованиями бесполезность предложенных правок.
Слушать/читать словестный понос уже поднадоело, переходи к делу и к аргументам.
Ну а читатели тут и оценить могут и твою аргументацию и (бес)полезность в кодах.
(жаль, что заведомо ясно, от вас доказательств делом/аргументом не дождемся ...)
Слушать/читать словестный понос уже поднадоело, переходи к делу и к аргументам.
Хорошо сказал. Этим и займемся.
Я же написал для невнимательных, что вылеты сам онаружил на чистом NLC6, и мой сын выдал мне для проверки/работы пяток вылетов (это и причина моего ковыряния) и десятки игроков, судя по топикам тех поддержки имеют фатальные и не очень ... проблемы с разгрузкой
Логи в студию. Ссылки на топики в техпотдержке.
Давай, переходи от "словесного поноса" к "аргументам"
-----------------
Но теперь прошу в тему НЛС. Это не вопросы и ответы
1. Попрошу лексикон "Логи в студию. Ссылки на топики в техпотдержке." Оставить для АМК.
Мы на СП, а не у вас 'дома', и придерживайтес правил для всех!
2. Не нужно тут выступать от имени тех.поддержики. Два часа назад Автор и разработчик мода (Сяк) однозначно высказался в разговоре со мной, что вы (Vergas, veless, ...) имеете статус 'личное мнение' и никаким боком не выступаете от имени NLC6/
Так что говорим о конкретных Ваших кодах/скриптах/поделках.
3. Вы прекрасно знаете, что логи в игре и NLC6 перезаписываются. Не имею особой привычке их коллекционировать. Да и ... написать в якобы лог смогу все что мне заблогарассудится. Нотариально же заверять истинность лога - не собираюсь.
Но если лог потребуется для разговора по сути - предоставлю и лог, но не ранее завтра.
Исходя из выше изложенного и уже имеющегося материала (собственно Ваши коды и правки к ним) - не вижу препятствий к обсуждению по сути.
Моя аргументация уже приведена (и в комментах к правках и в этом топике выше). Ваш ответ/возражение! (можно и в топике NLC6, если Автор топика и мода и модераторы не против).
А я и не заявлял что выступаю от имени НЛС. Это только Сяк имеет право. Я от себя лично.
Но другого ответа я и не ожидал.
Логи у тебя не сохранились?
Ладно.
Где жалобы юзеров по вылетам, связанным с разгрузкой? Или эти топики тоже поудоляли "люди не имеющие отношения к НЛС"? Я то за этим очень внимательно слежу.
У тебя наверное нет времени на поиски этих топиков?
Понимаю...
Но хотелось конкретной критики, а не "словесного поноса"
Надоел ты мне, теоретик модинга и скриптинга... Артос Полозов.....
---------------------
Не нужно тут выступать от имени тех.поддержики. Два часа назад Автор и разработчик мода (Сяк) однозначно высказался в разговоре со мной, что вы (Vergas, veless, ...) имеете статус 'личное мнение' и никаким боком не выступаете от имени NLC6/
И так откровенно врать не надо. Я тоже с Сяком каждый божий день разгорвариваю. Не солидно. Вроде взрослый же человек.
отредактировал(а) Vergas: 17-11-2010 07:26 GMT3 час.
Либо мы говорим о наличии/отсутсвии ошибок и разбираем/аргументируем эти моменты. Либо мы говорим о никчемности правок и их ошибочности и раббираем/аргументируем - либо занимайся демагогией и постозвонством с другим и в другом месте!
По логам я тебе дал ответ (не ранее завтра). По жалобам игроков - уволь, читать в очередной раз чтиво топиков тех поддержки NLC6 - меня, например, тошнит. Нужно тебе - ищи сам. Встретится мне - дам знать.
Хотя ... вот тебе тутошний свеженький #1384377.
Я на 99% уверен и в месте возникновения ошибки и в том, что это "исчезновение патронов" спасает от дальнейшего возникновения уже фатальной для биндера ошибки с кол-вом патронов из несуществующей пачки.
Можем по конкретному сэйву и ошибкам в 'razgruzka.script' и 'vergas_lib.script' отследить весь путь и последствия. Попрошу у Geralt of Rivia его сэйв или же ты выложи (если он тебе его выслал) для общего разбора.
И могу даже предложить свою версию истории возникновения проблемы с 'get_box_size' в "твоем" модуле, в отличии от 'почти' таких же дублирующих функций (в кол-ве 2х шт.) в моде NLC6.
И одно из трех или я лгу или Сяк или ты. Подождем завтра - ответ даст, надеюсь, сам Сяк.
И заметь, пока только ты пустословием занимаешься. Я уже сказал, все необходимые материалы/коды/комменты с моей стороны выложены. Что тебе доказать/объяснить, дабы до тебя дошло, что ошибки есть и фиксы их исправляют? Или опять голословно будешь муссолить про их отсутствие и "некчемность" правок?
Кто-то из нас точно НЕ взрослый и НЕ человек ... или с головкой не того ...
И как уже предупреждал ранее - тебя я буду наказывать делом, а не словом. Опускаться до твоего словесного поноса не имею желания.
(а мне ты не надоел ... меня просто уже тошнит, и тебя на СП за уши никто не тащит.)
[x] batment
Станный вопрос, ответ на который на поверхности: "Записать желаемое тебе звуковое сообщение, конвертнуть в формат для Сталкера, разместить в ресурсах мода и ... штатным способов по событию проигрывать для ГГ". Примеров , как проигрывать везде немало, о форматах звука листани и этот топик, за неделю вроде уже дважды тут давалась подробная инфа.
batment Вот для примера из личных кодов. :-)
Задаеш локальную переменную:
local snd_obj1 = xr_sound.get_safe_sound_object([[characters_voice\human_01\stalker\reactions\music\reaction_music_1]])
Вставляеш в функцию.
snd_obj1:play_at_pos(db.actor, vector():set(0,0,0), 0, sound_object.s2d)
Никто не сечёт, от чего зависит положение иконки патронов на худе, есть ли координаты?
А то у меня чего-то некоторые, подобно этим, вылазят за пределы отведённой области.
Скажите как сделать зацикленную функцию.Допустим лежит аптечка.ГГ ее берет а она вылетает из инвентяря(ну drop кароче).Я такое сделал,а аптечка вылетает только когда выполняеца функция.А мне надо чтобы аптечка выбрасывалась всегда когда гг ее берет.
batment
Если удалишь правильно (полностью секцию и перекомпилишь НЕ херСпавнером) - то фатальных глюков НЕ должно быть.
В игре на аномалии не завязаны какие-либо события/действия, а только трудности прохождения по Зоне. RENTGEN_4444
Используй коллбэки, в частности 'callback.on_item_take', 'callback.on_item_drop'!
Это для тебя и будет 'зацикленное' действие. Примеров их использования пруд пруди в различных модах и в оригинале.
RENTGEN_4444
Поставь вызов своей функции в экторский каллбек на on_item_take (obj)
в function actor_binder:on_item_take (obj)
с проверкой по секции(или clsid'у ) на объект твоей аптечки - пример проверки ищи сам.
Разработки: "Тотализатор","Kill-zone", "Mega-bomba", Mega_gravi",
"Рандомные тайники(а также декодер, мины+диалоговый аддон"), "Выбрасываемый рюкзак", "Аналоговые часики на худ"
с проверкой по секции(или clsid'у ) на объект твоей аптечки - пример проверки ищи сам.
========================
ничо не понял
добавлено спустя 13 минут
#erlik : RENTGEN_4444
Поставь вызов своей функции в экторский каллбек на on_item_take (obj)
в function actor_binder:on_item_take (obj)
с проверкой по секции(или clsid'у ) на объект твоей аптечки - пример проверки ищи сам.
А теперь понятным языком для скрипт-нуба.
отредактировал(а) RENTGEN_4444: 17-11-2010 16:14 GMT3 час.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.