TheDoktor подобные вылеты происходят по большей части из-за конфиго-скриптов, выкини все модели и текстуры, залей мод, но и тогда вряд ли кто-то будет делать за тебя. Сейчас есть масса модов которые способны "обойти" подобный вылет и дать некую подсказку "почему". Намёк ясен?
TheDoktor
Ну во-первых, поиск и анализ подобных ошибок возможен только на реальных кодах и при наличии сэйва, который воспроизводит твою ошибку. Так что ... если залил - то и ссылку приводи, может кто и не прочь скачать и поковыряться.
Могу дать пока только некоторые наметки, которые помогут сузить круг поиска.
- граница вылета врядли обширна. Скроее всего это все же точка. Подобные вылеты могут быть по немалому кол-ву причин, но общее - некий объект, который попадает в дистанцию алайфа или в логике объекта прописан радиус до ГГ, оказывается на расстоянии, которое активирует некую логику/схему/функцию, в которой имеется ошибка ...
Первое, что стОит сделать - снизить дистанцию алайфа и ... если граница возникновения ошибки изменится - следует искать в направлении 'стандартной' логики, которая зависит от 'штатных' значений алайфа. Если нет - искать в направлении эксклюзивной логики, где имеются параметры дистанции/радиуса.
- причиной может быть и срабатывание рестриктора и активизация логики некоего объекта.
Поиск виновника 'в лоб' может быть например таким: удалять по одному или группами объекты из игры в самом начале ее старта. Т.о. можно отыскать тот объект, который провоцирует ошибку и уже с ним разбираться.
...
Artos да я то понимаю что причина вылета некий предмет в центре... Но там же нет ничего особенного, одни бандюки. К примеру на армейских складах безлоговый вылет может происходить из - за калаша в тисках у Скряги, если модель менял, там кости не совпадают, а тут... Скрипты, логику я не трогал, добавил новые стволы, да старым визуалы поменял, всё! Больше ничего не трогал.
Кстати, вот ссыль<<<, если что. Сэйв<<< Struck
Сейчас есть масса модов которые способны "обойти" подобный вылет и дать некую подсказку "почему".
Чё то первый раз слышу. А где можно такой взять?
добавлено спустя 1 минуту
Блин! Два месяца стволы "выводил" чуть ли не под линеечку, а тут такой облом!:obstenu:
отредактировал(а) TheDoktor: 05-08-2011 21:07 GMT3 час.
Я – хозяин своей судьбы, но только судьба знает, где закончится мой путь.
TheDoktor ну я когда обленюсь пользуюсь вот этим http://stalker-portal.ru/plug.php?e=weblogs&m=page&id=6655 , довольно полезная штука чтобы по сто раз не перезаходить.
TheDoktor
Кроме ссылки на коды моды не вижу ссылки на сэйв. Или ты предполагаешь что время, потраченное на прохождение до ТД - это малость? Если я и скачаю мод и найду время 'посмотреть ошибку' - то точно не стану проходить игру с самого начала ...
И не нужно пустословия о том что 'там же нет ничего особенного'. Что должно быть особенным и вызывать ошибки? Любой объект в игре может провоцировать фатальные вылеты если имеет некорректные параметры или вносить в логику свою или чужую недопустимое.
...
Struck
Упомянутое тобою в данном случае не имеет смысла. Искать ошибки в синтаксисе скрипта на лету иль иначе - это совершенно иной пласт ошибок. В данном конкретном случае это тлько потеря времени.
TheDoktor
Не обольщайся, заинтересованности моей нет. Просто ... встречая и в своем моде порою подобные ошибки, наработав некие навыки по их поиску, имея все же какой-никакой самодельный доп.инструментарий ... могу (если будет время и желание) а) потренироваться дополнительно и б) попутно помочь менее опытному в таких делах модмейкеру.
Не более ...
Если нетрудно,подскажите,где ошибка.Есть статья.Спавн мертвеца.Добавляю контроллёру выдачу инфопоршня при убийстве:
on_info = %+prizrak_ubit%
Призраку в логику:
on_info = {+prizrak_ubit} %=kill_npc()%
Вылет при убийстве контроллёра:
[error]Arguments : LUA error: d:\s.t.a.l.k.e.r\gamedata\scripts\_g.script:20: bad argument #2 to 'format' (string expected, got no value)
Если контроллёр убивает Призрака раньше, то вылета нет.Игра идёт своим чередом.
Arist
Совсем недавно в этом топике (а ранее десятки раз в других местах) давалось пояснение о строках лога типа: _g.script:20: bad argument #2 to 'format'. Найди и почитай, т.к. еще не раз встретишься с подобным.
А ошибка твоя банальна (если конечно не изменены коды и не добавлены функции):
Часть строки логики для Призрака: %=kill_npc()% - это ни что иное как вызов из 'xr_effects.script' функции 'kill_npc()' которая просто напросто отсутствует в этом файле, а имеется 'kill()'. Вот и ругается схема вызовом функции 'abort' при смерти Призрака, прерывая игру.
И, кстати, совершенно непонятно, для чего вызывать в логике функцию суицида (самоубийства) для уже трупа?
Как впрочем и непонятна твоя добавка к логике для контролера - он дает инфопоршень, что убит Призрак ...
Dark Scripter
Сформулируй конкретные требования к результату, а не размытые "хотя бы" ...
Что должно являться результатом парсинга строки?
Да и возможные вариации для самой строки 's' неплохо бы уточнить.
Тебе требуется разделить строку по первому вхождению символа '_' или нечто более сложное?
И требуется ли использование именно данной функции/итерации или важен результат вне зависимости от использованного способа?
Arist
Если нет причины добалять коды - стОит использовать те, что есть.
Для чего создавать новую функцию, если уже есть ее полный 'штатный' аналог ( function kill(actor, npc) )?
Чтобы проще было самому запутаться? :-)
Dark Scripter
Выше чуток уже дал попытку оптимизации ...
Тут скорее всего не выжмешь более ничего.
На выходе требуется задать в статистике актора то оружие, которым он суммарно нанес наибольший урон для всех объектов.
Имеем четыре типа: гранаты, десерт-игл, гранатомет и остальное оружие.
Порядок проверки уже достаточно оптимален, первыми отсекаются гранаты, далее игл и гранатомет.
Если порядок поменять, то придется все одно вводить условия и их кол-во превысит исходные проверки.
И в заключение. Вызов подобных функций относительно одиночен. В игре актор наносит не каждую секунду хиты ... Если уж оптимизировать - то подобные места я бы рассматривал в последнюю очередь.
Н**5002618d69873ce82a42**:object(active_item:id())
if s_obj then
local s = s_obj:section_name()
for w in string.gfind(s, "%w+") do
if weapons_table[w] ~= nil then
weapons_table[w] = weapons_table[w] + hit_amount
end
end
local amount,mask = 0
local mask = nil --/#+# маска секции самого хитового оружия
for k,v in pairs(weapons_table) do
if v > amount then
amount = v
mask = k
end
end
if mask then
if mask == "rgd5" or mask == "f1" then
actor_statistic.favorite_weapon_sect = "grenade_"..mask
elseif mask == "desert" then
actor_statistic.favorite_weapon_sect = "wpn_desert_eagle"
elseif mask == "rg" then
actor_statistic.favorite_weapon_sect = "wpn_rg-6"
else
actor_statistic.favorite_weapon_sect = "wpn_"..mask
end
end
end
end
end
[/code]
Можете пояснить систему рюкзаков в амк? Конкретно меня интересует как сделать ограничение по взятие тех или иных вещей. Смотрел скрипт(restriction_stock.script), мало понятного. Я даже действия не понял, т.е. как оно работает. Смутно так понял что есть некие два параметра, один как ограничитель, а другой постоянно меняется(от кол-ва вещей), они сравниваются и при определенном значении производится действие.
Dark Scripter
Так. Через пару дней выйду из загула и расскажу как всё сделать по правилам Lua.
А пока не занимайся ерундой. Lua не для того придумали, чтобы над ним издеваться.
Struck
1. Имеются параметры "макс-кол", для определённых категорий предметов.
2. Отслеживаются все виды взятия предметов в инвентарь.
3. При каждом событии взятия, производится итерация инвентаря с распределением имеющихся вещичек, по категориям.
4. После итерации инвентаря производим сравнение полученных значений с параметрами "макс-кол".
5. Если одно из значений превышает установленный порог, то производим выбрасывание взятого предмета, путём дропа.
Это взято не из АМК, а всего лишь один из вариантов подобной фичи. Не удивлюсь, если в АМК так и сделано.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Я понимаю на счёт велосипеда, когда хочется самому. И одобряю. Но не до такой же степени. Ты ещё оператор for распиши на составляющие while_do_end.
Для итерации инвентаря, имеется специальный ме**5002618d69873ce82a42**ion blabla()
...
db.actor: inventory_for_each(target)
...
end
function target(item)
local sec_name = itrm:section()
...
end[/code]
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Оба метода работают аналогично, с той лишь разницей, что метод iterate_inventory(...) производит итерацию только по явным предметам.
При этом, метод inventory_for_each(...) производит итерацию абсолютно по всем предметам инвентаря, включая скрытые.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
Struck Не советую дропить предметы во время итерации. Можно получить баг с итерацией, вплоть до краша игры (если не установить соответствующих защит). Так как данный итератор завершить преждевременно нельзя, советую производить установку ключа. При истином значении которого, производить дроп взятого предмета, после завершения итерации.
Проект "Mobile Manager" закрыт, в связи со стечениями неблагоприятных обстоятельств, и последующей потерей всех файлов и справок текущего проекта.
function wolf_lager_create_zombie()
alife():create(zombie_normal,vector():set(-174.166,-20.01,-131.69),78664,55)
alife():create(zombie_normal,vector():set(-175.15,-19.93,-159.579),75357,52)
end
Как выдать игроку инфопоршн, после смерти обоих этих зомбей?
Сталкер - круто, Сталкер - класс,
Crysis смоем в унитаз!!
Метро не круто и не класс!
ПЫСа смоем в унитаз!))
---
Если у кого то есть вопросы по Game Maker, модмейкерству или языку html, то пишите - вместе потупим =))
singapur22 надо тогда его как-то сохранять(как?)(когда вводить этот ключ?, я так понимаю у него система true/false будет), ибо переменная item вне итерации равна nil. Во время итерации уже**5002618d69873ce82a42**y,item)
if blabla[item:section()] then
autoweapon = autoweapon+1
if autoweapon > 4 then
--db.actor:drop_item(item:id())
sendtip("Это уже некуда положить")
end
end
end, nil)
end[/code]
отредактировал(а) Struck: 06-08-2011 18:11 GMT3 час. Снова в строю.
Эта тема закрыта, публикация новых сообщений недоступна.
Продолжая пользоваться сайтом, вы соглашаетесь с использованием файлов cookie. Страницы сайта могут содержать информацию, запрещенную для просмотра посетителям младше 18 лет. Авторское право на серию игр «S.T.A.L.K.E.R» и используемые в ней материалы принадлежит GSC Game World.