abramcumner 1 145 Опубликовано 25 Ноября 2011 Так это нужно прописывать не в update, а в функцию, вызываемую при попадании (hit_callback). Тогда никаих лишних переменных вводить не придётся. Для ГГ в оригиналах hit_callback не вызывается Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 29 Ноября 2011 *Shoker*, Real Wolf, custom_data = <<END нет у вертолета логики вот он и гудит где-то Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 2 Декабря 2011 (изменено) Нижеследующие параметры есть только у дробовиков и ружей 8) upd:ammo_ids Количество оставшихся патронов в стволе. Полностью дублирует upd:ammo_elapsed, зачем - непонятно. Вообще-то не дублирует. После этого параметра должны прописываться типы заряженной дроби в количестве upd:ammo_ids Типа можно дробовик зарядить дробью, жеканом и т. п. одновременно 4) upd:ammo_type Тип патронов. 0 - обычные, 1 - бронебойные. Если есть еще - идут в порядке повышения убойности (так вроде) Номера идут, как перечислены в конфиге оружия. Изменено 2 Декабря 2011 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 2 Декабря 2011 abramcumner, ammo_ids всегда равен ammo_elapsed. Проверял для всех дробовиков, с разными типами патронов, с разным количеством патронов разных типов. Так в ТЧ, по крайней мере. Он и должен быть равен ammo_elapsed, просто он задает размер массива идущего следом. Дальше идет массив байт - определяет тип заряженных патронов. Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 2 Декабря 2011 (изменено) serega-gamer, количество патронов в инвентаре для оружия получаешь так же, как и в своем коде выше, только используешь функцию get_ammo_total вместо get_ammo_in_magazine Дельный совет!!! --/ Artos Изменено 2 Декабря 2011 пользователем Artos Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 2 Мая 2012 (изменено) Надо понимать, что если таких мест становится слишком много, то контролировать их все становится просто невозможно, поэтому подход с хранением id является универсальным. С таким же ид может быть уже совсем другой объект. Лучше чистить Можно подумать над апгрейдом db.storage. Везде использовать ссылку на объект из него, а в нем ссылку на клиентский объект обнулять по нет_дестрой. А дальше и над заменой lua_help`ных функций, чтобы они возвращали не клиентский объект, а спец объект. Потом использовать Null object, чтобы убрать проверки на существование объекта Но это уже будет в сталкер2 Изменено 2 Мая 2012 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 2 Мая 2012 а вот Null Object pattern - вещь более чем сомнительная, поскольку может (и с гарантией будет) скрывать ошибки и вместо повышения надёжности в итоге приведёт к появлению неуловимых и неотлаживаемых багов. Добавить в дебаге логирование и вывод стека при обращении к такому объекту, можно и аборт добавить. Вот здесь бы пригодился сборник этаких "шаблонов", т.е. типичных подходов для серверных, клиентских объектов разного типа и где и как это делать. Если скрипты пишет один человек - достаточно небольшой дисциплины. Несколько - нужен аборт, чтобы сразу по рукам бил. Это как с mark_item_dropped; хорошая задумка оказалась совершенно не нужной, потому что использовалась/ется не всеми. Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 29 Июня 2012 AndreySol, Потому что проблема с сидом совершенно в другом: сид не находится в реестре сидов. А не находится, потому что задаешь его после регистрации Перехвати событие on_before_register и установи сид там. Если используешь последние наработки с событиями, то сделать это просто. Ну или переключить онлайн/оффлайн. Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 29 Июня 2012 К сожалению, ничего из указанного не поможет. SID не пропишется в глобальный список до следующей загрузки игры или перехода на другой уровень. Вообще-то способ с прописыванием сида в on_before_register давно и успешно у меня работает. Попробуй на досуге. Собственно on_before_register не зря так назван. Метод вызывается, как раз до прописывания в глобальный список Добавлено через 3 мин.: Что есть "реестре сидов" ? Имеется в виду game_story_ids.ltx ? Реестр сидов (malandrinus его назвал глобальный список) - список всех зарегистрированых сидов в игре. Хранится в движке. Если в понятиях луа, то таблица, ключ которой сид, значение серверный объект. Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 30 Июня 2012 Если не секрет, как Вы прописываете story_id. Используете self.m_story_id ? m_story_id - свойство только для чтения. Прописываю также через нет-пакеты. Только делаю это в se_stalker:on_before_register Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 1 Июля 2012 (изменено) AndreySol, function se_stalker:on_before_register() local ser_obj = alife():object(self.id) se_stalker -это же и есть тот серверный объект, который ты получаешь смело используй self вместо ser_obj. Ну и как правильно заметил, в on_before_register объект еще не зарегистрирован. Кстати такой код всем подряд будет писать сид 93. Лучше уж перед alife():create установи глобальный флажок в 93, в on_before_register проверь флажок на нил,установи сид и флажок в nil. Изменено 1 Июля 2012 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 12 Января 2013 Но такой подход увеличил быстродействие только в 2 раза, что тоже не плохо, но не достаточно. Фризы то хоть уменьшились? при отказе от классов протестируй еще такой вариант: for i = 1, 1000000 do local n = b.num end Без функций вообще все летать будет. :ny_megalol: Ты кстати, проверил, что фризы из-за скриптов, если из-за скриптов, то именно из-за net_spawn? А то я недавно читал, что у кого-то фризы из-за моделей были. И при выходе в онлайн не только net_spawn вызывается. Время выполнения инициализации звуков я так понимаю ты замерил? Напиши цифирки, сколько функция выполняется и сколько весь net_spawn. Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 12 Января 2013 (изменено) метод net_spawn выполняется достаточно быстро, но фризы ощутимы. В общем, копаю дальше... Начни с того, что отключи биндер у НПЦ, проверь фризы. Если исчезнут, значит дело в скриптах. Дальше замеряешь методы биндера reinit, load, reload, net_spawn, первое выполнение апдейта. Смотришь тайминги. А отказ от классов - это уже тяжелая артиллерия, если совсем не найдешь причину фризов. Изменено 12 Января 2013 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 6 Февраля 2013 (изменено) local item = db.actor:active_item() local vX, vY = get_all_direction(item:direction()) vY у тебя всегда должен быть равен 0, 1, 0. Хотя скорее -1 В принципе теперь я могу доделать то, что планировал Лучше расскажи, что ты планировал, а то пока непонятно даже, что ты хочешь. Однако в данной функции есть один недостаток - она не учитывает Roll (наклон объекта вбок) Ну да, ты указываешь, что верх у тебя вверху (0, 1, 0) Если пользуешься xray-extensions можно попробовать получать оси из xform, например. Изменено 6 Февраля 2013 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 6 Февраля 2013 Shoker, Какой такой наклон у объектов? Где ты это видел? А если это ГГ, то зачем тебе эти пляски, если можно не заморачиваясь взять уже готовую камеру? Он же привел в пример калаш. Явно у него и наклон должен быть. Его в руках крутят, как хотят. Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 19 Июня 2013 @*Shoker*, менять дирекцию с большой скоростью - это по русски крутить? В теории можно приложить 2 антиколлинеарные силы к противоположным точкам тела - оно начнет крутиться на месте Будет ли работать это в ОДЕ - не знаю. 1 Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 3 Августа 2013 (изменено) Вы запрашиваете значение элемента таблицы V Но для всех полей Вашей таблицы значение V равно nil (Т.е. ключ - это строка с именем инфопорции, а значенее-то nil!!!!!!!!) Не-не. Таблица вида local rnd_tbl = { "Mutant_boar_info", "Flesh_info", "Pseudo_flesh_info", "Bloodsucker_info",эквивалентна таблице local rnd_tbl = { [1] = "Mutant_boar_info", [2] = "Flesh_info", [3] = "Pseudo_flesh_info", [4] = "Bloodsucker_info",Ошибка в том, что при итерировании таблицы, таблица меняется(table.insert). Так делать просто нельзя. Ну и код сам по себе напрочь бестолковый. Изменено 3 Августа 2013 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 7 Августа 2013 Вроде одно время мелькало сообщение, что где то нашли функцию-замену в одном из UI-классов или типа того.Где-то Malandrinus добавил в xray-extensions. Просто функция с подходощей сигнатурой нашлась в "одном из UI-классов". Ну или вообще какие есть более\менее адекватные варианты чтобы определить что в данный момент у игрока не открыта никакая UI-менюшкахВ actor_menu.script отслеживаются движковые окна. В скриптовые окна добавить при показе установку флажка, при закрытии сброс. Нашёл этот пост (в прошлый раз не так поиском воспользовался), он закрывает вопросы по[/size] level.main_input_receiver(), но всё ещё остаётся вопрос о том как универсальным методом определить что открыто любое UI-окно. (без правок движка)Совершенно не закрывает С окном, выведенным этим методом, невозможно никакое взаимодействие игрока. Это только для показа информации и все. 1 Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 11 Августа 2013 @*Shoker*,да, для оригинального ЗП совершенно нормальная ситуация. 1 Поделиться этим сообщением Ссылка на сообщение
abramcumner 1 145 Опубликовано 12 Августа 2013 (изменено) @Dennis_Chikin, странный вопрос. Зачем до него "добираться", вот же он. Прибить вестимо как: alife():release(server_object.id), правда так лучше не делать - на следующем апдейте там удалить. Изменено 12 Августа 2013 пользователем abramcumner Поделиться этим сообщением Ссылка на сообщение