Kirgudu 1 370 Опубликовано 12 Января 2015 (изменено) @BoBaH_671, простейший пример - сохранять название локации в pstor ГГ, а при загрузке сверять название текущей локации с сохранённым. Например: if xr_logic.pstor_retrieve(db.actor, "lvl", "first_level") ~= level.name() then db.actor:give_info_portion("level_changed") xr_logic.pstor_store(db.actor, "lvl", level.name()) end вместо "first_level" следует подставить название стартовой локации (для ЧН это "marsh") - тогда инфопорция будет выдана только при смене локации, но не при старте игры. "level_changed" - название выдаваемой инфопорции. Проверку можно повесить, например, на первый апдейт актора. Изменено 12 Января 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 2 Марта 2015 @Nazgool, ссылку на твой пост с переведённым руководством @Dennis_Chikin опубликовал в шапке той темы ещё в январе. Вот: http://www.amk-team.ru/forum/index.php?showtopic=11584&p=905371 Ну а я добавил сейчас пояснения. Так что действительно, «кто ищет...». Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 13 Апреля 2015 (изменено) @Николай1, начинание благое, жаль только припозднилось года этак на 2-3.Но если удастся предложить что-то действительно новое и полезное - всем будет только хорошо. Для начала рекомендую изучить аналогичные решения, уже предложенные другими авторами, коих даже больше, чем указал @Desertir. Можно сделать общий поиск по форуму слова «event». Или поискать отдельные варианты: "Песочница" от @xStream, слот-сигнальная система от @Malandrinus, были ещё частные реализации от @Artos и, кажется, @Monnoroch и @Viнt@rь. Изменено 13 Апреля 2015 пользователем Kirgudu Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 15 Апреля 2015 @AndrewMor, как минимум "if i==count then", чтобы не вылетало. А во-вторых, после окончания действия цикла (перед закрывающим функцию "end") в переменной col как раз и будет нужное значение, можно делать с ним что угодно. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 15 Апреля 2015 Потому что переменая i существует только внутри цикла, а вне его равна nil. Оставь только проверку на col ~= 0. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 15 Апреля 2015 @AndrewMor, ты б объяснил толком, что хочешь сделать. Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 19 Мая 2015 (изменено) @Zander_driver, смотри свойство нет-пакета weapon_state. Если оружие заклинило, будет иметь значение 7. Свойство есть и в стандартной, и в update-части. Изменено 19 Мая 2015 пользователем Kirgudu 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 2 Июня 2015 (изменено) @dimka02, X-Ray Extensions, функция level.get_target_dist(). Изменено 2 Июня 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 10 Июня 2015 (изменено) @Struck, шикарный ответ. Человеку, слабо разбирающемуся в предмете, даёт исчерпывающий объём информации. Имхо, уж лучше вообще не отвечать, чем вот так. @Winsor, касательно первого вопроса, как можно догадаться из названия методов, они предназначены для работы с update- и state-частями нетпакета соответственно. Общие сведения есть на форуме, например здесь. Если же хочется понять, каким методом работать с определёнными свойствами определённого объекта, действительно, тут может помочь изучение файла acdc.pl. Но не абы какого - от «Universal ACDC» не пойдёт. Открой acdc.pl от bardak, предназначенный для нужной части игры. Там ищи таблицы upd_properties_info - для каждого объектного класса своя. В этих таблицах и описаны доступные свойства update-части нетпакета. В качестве альтернативы можно ещё поизучать скриптовые модули нетпакетов (для m_netpk от Artos ищи таблицы up_props). Изменено 10 Июня 2015 пользователем Kirgudu 3 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 11 Июня 2015 (изменено) self.storage - заспавленный на уровне объект, стою возле него, т.е. он в онлайне... Изменение пакета возможно только для серверных объектов, находящихся в оффлайне. Иначе серверный объект постоянно обновляется данными клиентского - отсюда и несоответствие реальной и ожидаемой длин считанных из пакета в объект данных. Кстати, какой класс у твоего объекта? Если специальный, только для хранения твоих данных, имеет смысл добавить в его биндер методы, препятствующие переходу объекта в онлайн. Примерно так: function se_custom_storage:can_switch_online() return false -- никогда не выходить в онлайн end function se_custom_storage:can_switch_offline() return true -- всегда переходить в оффлайн end Если же один из стандартных, перед записью данных объект следует принудительно перевести в оффлайн: function switch_offline(sobj_id) local sim = alife() if sim and sim:object(sobj_id) then sim:set_switch_online(sobj_id, false) sim:set_switch_offline(sobj_id, true) end end затем, после записи данных, перевести аналогичным образом обратно в онлайн. А вообще, для хранения своих данных лучше воспользоваться полностью отлаженными решениями, которые можно найти здесь, на форуме. Навскидку можно предложить альтернативные реализации от @Malandrinus (используется, если не ошибаюсь, в OGSE) и @Artos (делаем поиск по «se_stor»). Изменено 11 Июня 2015 пользователем Kirgudu 1 1 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 3 Июля 2015 (изменено) @Forser, будет. И даже целых два, как и в первом варианте. Во-первых, то, что за пределами функции, выполнится уже при инициализации модуля (если, конечно, не заключено в ещё большую внешнюю функцию). А значит попытается присвоить значение переменной slot_s, которая в случае отсутствия чего-либо в слоте станет равной nil. И следующим действием ты сразу пытаешься взять секцию, что с slot_s = nil даст немедленный вылет. А во-вторых, уже actor:item_in_slot(n_s) при начальном выполнении даст, скорее всего, вылет, так как переменная n_s ещё не инициализирована. Вот вариант: local get_slot_section = function(n_s) local item = db.actor and db.actor:item_in_slot(n_s) return item and item:section() end function test() local section = get_slot_section(номер_слота) if section == "предмет" then ... end end Изменено 3 Июля 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 3 Июля 2015 (изменено) @Карлан, не-не, я уже одной ногой в отпуске, на 2 недели оставляю раздел на тебя и остальных дровосеков. Но перед уходом на правах модератора призываю всех участников темы к постам по существу, без перекидывания топорами и личных выпадов! +: dc или кто-нибудь ещё из ответственных, этот мой пост и всё лишнее выше под снос, плз, когда сочтёте нужным. Изменено 3 Июля 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 3 Августа 2015 (изменено) @Winsor, ну а кто мешает сократить этот список так, чтобы он содержал только сталкеров? Точнее, добавить ещё один. Могу сказать про ЧН, но в ТЧ должно быть что-то аналогичное. В ЧН объекты добавляются в db функцией db.add_obj(), которая вызывается из motivator_binder:net_spawn(sobject).Надо всего лишь добавить в db ещё одну таблицу (например, db.stalkers), а в add_obj добавить проверку isStalker() и если она вернёт true - вставлять запись в новую таблицу (и в общую по-прежнему тоже). Таким образом сокращение размера выборки произойдёт уже на стадии загрузки (и/или спавна нового объекта), то есть заранее.А потом в функции, которую привёл выше @naxac, делать перебор по этой таблице, а не по общей. Изменено 3 Августа 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 3 Августа 2015 (изменено) Только надо не забыть добавить как вставку в эти таблицы, так и удаление из них (опять же по аналогии с имеющимся функционалом для общей таблицы) - чтобы в этих таблицах не накапливались несуществующие объекты. Изменено 3 Августа 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 3 Августа 2015 (изменено) @Zander_driver, weapon_flags - оружие спрятано/взято в руки (0/1). weapon_zoom - режим обычный/прицеливание (0/1). num_items - точно не скажу, но вроде бы от значения этого параметра зависит дальнейший состав нет-пакета. То есть если там 0 - дальше следуют как раз оружейные параметры. Если не 0 - перед оружейными параметрами идёт ещё update-часть от cse_alife_inventory_item. Как-то так. Upd: насчёт доп. свойств нет-пакета при num_items ~= 0 были упоминания пару лет назад, например здесь: http://www.amk-team.ru/forum/index.php?showtopic=6185&p=727594 Изменено 3 Августа 2015 пользователем Kirgudu 1 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 19 Августа 2015 (изменено) @Wlad777, например так: local client_objects_array = {} -- массив клиентских объектов, расстояние до которых нужно проверить. function check_distance() for _,object in pairs(client_objects_array) do if db.actor:position():distance_to(object:position()) < 100 then return true end return false endВернёт true при любом объекте из массива, находящемся ближе 100 метров.Мерить расстояние до самого ближнего объекта не имеет смысла, так как если дальний объект укладывается в нужное расстояние, то и ближний - автоматически тоже. Изменено 19 Августа 2015 пользователем Kirgudu 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 19 Августа 2015 А как мне этот массив получить то сначала? Вот заспавнены у меня на уровне, в разных местах, скажем 15 объектов секции [safemarker]. Это уже зависит от задач и окружения. Можно перебрать все онлайновые объекты в db.storage, получить их секцию и сравнить с нужной. Можно вообще все серверные объекты перебрать (alife():object(i), где i = от 1 до 65534), только позицию у таких объектов надо будет брать не методом position(), а в свойстве .position. Но это затратные способы. Лучше организовать свою таблицу для таких объектов - такой вариант обсуждался здесь несколько страниц назад. А вообще, в скриптах примеров навалом. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 25 Августа 2015 (изменено) @_Val_, это не так, поскольку при оригинальном разборе проверка второго условия происходит только если первое не сработало. А значит, неявным образом учитывается результат проверки первого условия. Как программисту мне твоё нововведение нравится: условия в фигурных скобочках объединяются по "and", фигурные скобочки между собой по "or". Правильно я понял? Как пользователю, который пишет и читает логику, не нравится. Нечеткость не однострочной формы, а то что фигурных скобочек станет несколько - непонятно, то ли пропустили секцию, то ли так и хотели.Можно для «or» использовать не пробел, а ввести дополнительный разделитель (чтобы было проще читать - вообще неиспользуемый в логике в настоящее время символ, можно с опциональными пробелами вокруг него), который однозначно будет указывать на новый тип конструкции. Те пользователи, которые привыкли писать по-старому и не хотят разбираться с новыми возможностями (как вариант - вообще не в курсе этих возможностей), так и продолжат писать по-старому. А кто захочет - будет использовать, наперёд зная, что означает данное написание. Изменено 25 Августа 2015 пользователем Kirgudu 2 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 4 Сентября 2015 Никогда не был силён в регулярных выражениях.Требуется из строки вида, например, «aaa_bbb_ccc_ddd» вытащить подстроку от первого символа и до последнего подчёркивания включительно, то есть «aaa_bbb_ccc_», и присвоить это значение переменной средствами сталкеровского Lua. В строке могут быть буквы, цифры и подчёркивания, больше никаких знаков, регистр любой.Может кто-нибудь помочь? Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение
Kirgudu 1 370 Опубликовано 26 Сентября 2015 @Romz, пробежался глазами, вроде всё правильно. Единственное, что смутило, это packet:w_begin(0) packet:r_seek(2) p_obj:STATE_Write(packet)Я бы STATE_Write и r_seek поменял местами, сделав установку позиции чтения после записи в пакет, а не до. Вдруг эта позиция при записи может смещаться.Ну и непонятно, какие аргументы передаёшь ты в функцию извне. 1 Свои работы и совместные проекты: Инструмент, OGSM CS, Final Stroke, HARDWARMOD Полезное: модули Артоса, XML парсер Поделиться этим сообщением Ссылка на сообщение