Nazgool 250 Опубликовано 15 Апреля 2017 Поделиться Опубликовано 15 Апреля 2017 @UnLoaded, О чем вы говорите? Какая универсальная защита? Просто защита конкретной функции. Коих создается великое множество. И лично мне не хочется несколько раз возвращаться к переписыванию одного и того кода по нескольку раз. Поэтому лично я поступил бы именно в таком духе. Ну написал бы несколько вспомогательных функций типа iff(cond, a, - (кодеры поймут что я имел в виду) А насчет "медвежьей услуги". Я посчитал, что если напишу : -- тут что-то делать. лог, вылет, исправить или ничего не делать то, будет достаточно ясно. Видимо ошибался. 1 Ссылка на комментарий
UnLoaded 313 Опубликовано 16 Апреля 2017 Поделиться Опубликовано 16 Апреля 2017 Я посчитал, что если напишу : -- тут что-то делать. лог, вылет, исправить или ничего не делать то, будет достаточно ясно. Видимо ошибался. Возьмем вариант с не валидным значением аргумента ф-ции "community". В local data в этом случае получим данные из community = stalker, следовательно код: then return -- тут что-то делать. лог, вылет, исправить или ничего не делатьend никогда не выполнится. Это по Вашему не медвежья услуга ? Ссылка на комментарий
Nazgool 250 Опубликовано 16 Апреля 2017 Поделиться Опубликовано 16 Апреля 2017 (изменено) @UnLoaded, Нет, это не медвежья услуга, т.к. автор изначально хочет! чтобы при отсутствии значения бралось некое значение по умолчанию ("stalker") Т.е. такое действие не побочный эффект, а сделано намеренно. Вот если бы в исходном коде не было : if community == nil then community = "stalker" end то и я бы написал : ... and community_condition[community] Я всего-лишь подправил код так, чтобы исходная идея автора работала как можно надежнее. Изменено 16 Апреля 2017 пользователем Nazgool Ссылка на комментарий
Space.Marine 466 Опубликовано 18 Апреля 2017 Поделиться Опубликовано 18 Апреля 2017 Подскажите, пожалуйста что делает функция: function k_predicate_s(obj_info) return obj_info.profile_name == "esc_killer_specnaz" end и далее по скрипту: t = { section = "logic@esc_killer1_raid", idle = 0, prior = 8, state = {4}, online = true, predicate = k_predicate_s, in_rest = "", out_rest = "" Ссылка на комментарий
UnLoaded 313 Опубликовано 18 Апреля 2017 Поделиться Опубликовано 18 Апреля 2017 что делает функция Так, ты сам уже нашел, что она делает - задает условие принятия неписей на работу в гулаге. Т.е. на эту работу("logic@esc_killer1_raid") будет назначен только тот непись, у которого профиль в конфиге - "esc_killer_specnaz". Ссылка на комментарий
Space.Marine 466 Опубликовано 18 Апреля 2017 Поделиться Опубликовано 18 Апреля 2017 (изменено) Т.е. на эту работу Я так понимаю, будет заспавнен вояка спецназовец во время нападения наймов на деревню новичков ? P.S. Имеется мод (ТЧ Complete). Там, если вынести КПП около деревни новичков, происходит респаун вояк (появляется спецназ). Хотел перенести себе в мод. Сравнивал all.spawn - отличий (по неписям) не нашёл. Единственное в gulag_escape.script отличия по тем строчкам из прошлого поста. Подскажите как реализовать. Изменено 18 Апреля 2017 пользователем Space.Marine Ссылка на комментарий
h0N0r 341 Опубликовано 22 Апреля 2017 Поделиться Опубликовано 22 Апреля 2017 Понадобилось заспавнить немного лута на локе (сверх того, что расставлено через сдк), но у способа через скрипт (alife():create) есть недостаток - предмет оказывается на ближайшей аи-ноде, что делает невозможным спавнить данным методом на крышах и т.п. В сдк просто - выключил у предмета "used ai locations", и всё нормально. Немного поизучал, что от чего зависит, и в итоге добавил "self:use_ai_locations(false)" в se_item.script (на примере se_eatable (ЗП) - аптечки, еда): function se_eatable:on_register() ... self:use_ai_locations(false) end После этого предмет остаётся в нужных координатах, и остаётся там при сейв / лоаде / онлайн / оффлайн. И всё же в скриптах разбираюсь самую малость, и хотелось узнать от знающих людей - правильное ли такое решение и не будет потом багов? https://sites.google.com/view/xray-sdk-0-4-smg Ссылка на комментарий
UnLoaded 313 Опубликовано 23 Апреля 2017 Поделиться Опубликовано 23 Апреля 2017 правильное ли такое решение и не будет потом багов? Разве не понятно, что таким образом ты отключил привязку к AI-сетке у ВСЕХ "eatable" объектов. Багов скорее всего не будет, не думаю что этот флаг("used ai locations") критичен для "eatable" хлама, но кто его знает что об этом движок думает ? А вообще, на мой взгляд, правильнее будет сбрасывать этот флаг для поля "object_flags"(правкой нет-пакета, вроде доступ к этому полю есть) при спавне конкретного объекта. 1 Ссылка на комментарий
Kirgudu 1 217 Опубликовано 23 Апреля 2017 Поделиться Опубликовано 23 Апреля 2017 (изменено) @h0N0r, выше @UnLoaded правильно написал - абсолютно незачем устанавливать этот флаг сразу для всех объектов определённого типа. Но и в net-пакеты в твоём случае залезать тоже нет необходимости, так как, судя по успешному использованию функции use_ai_locations, делаешь ты это на платформе ЗП. Поэтому используй её и дальше, только не глобально, а сразу после спавна того предмета, для которого ты хочешь отключить привязку к AI-сетке. Примерно так: local s_obj = alife():create(section, position, lvid, gvid, pid) local se_item = alife():object(s_obj.id) se_item:use_ai_locations(false)Можно и через net-пакеты, конечно, но в случае ЗП проще воспользоваться готовой функцией. Изменено 23 Апреля 2017 пользователем Kirgudu 1 1 Инструмент Ссылка на комментарий
UnLoaded 313 Опубликовано 24 Апреля 2017 Поделиться Опубликовано 24 Апреля 2017 Можно и через net-пакеты, конечно, но в случае ЗП проще воспользоваться готовой функцией. Не спорю, ни грамма - если ф-ция работает без дрюканья нет-пакетов. то я только ЗА... Ссылка на комментарий
Dennis_Chikin 3 658 Опубликовано 29 Апреля 2017 Поделиться Опубликовано 29 Апреля 2017 Внезапный такой вопрос: у кого в модах в ПДА накапливается МНОГО выполненных квестов - это у всех при переключении на их показ АДСКИЕ тормоза, или это у меня что-то локальное ? Если не только у меня - кто-то пробовал с этим бороться ? Солянка обезжиренная, диетическая, полезные советы по "солянке", текущий тестовый патч Ссылка на комментарий
dsh 3 824 Опубликовано 29 Апреля 2017 Поделиться Опубликовано 29 Апреля 2017 АДСКИЕ тормоза Ну, не сказать, что бы адские, но тормозит, да. кто-то пробовал с этим бороться ? Я решил просто циклические задания, коих больше всего, вынести из заданий вообще. dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 2 Мая 2017 Поделиться Опубликовано 2 Мая 2017 (изменено) Всем привет. Словил себя на том, что много трачу времени на перемещение по локации тестируя что-то. Решил сделать что-то похожее на Noclip режим(режим свободного полета). Код: function noclip_upd() local position = db.actor:position() local direction = device().cam_dir if noclip_active == true then local v = vector() v.x = position.x + direction.x --или просто v= position:add(direction) v.y = position.y + direction.y v.z = position.z + direction.z db.actor:set_actor_position(v) end end Вроде бы все работает, . Но мне так и не удалось изменить скорость полета и еще заметил, что скорость зависит от фпс ( на краях карты скорость больше). Пробовал вектор умножать/делить на delta - получаю очень большую скорость. На delta * 0.001 - получаю Также пробовал изменять длину вектора или сделать длину единичной с помощью методов vector:set_length(n) и vector:normalize() , вот Что подскажете сделать, как решить проблему? Изменено 2 Мая 2017 пользователем TIGER_VLAD 1 Ссылка на комментарий
naxac 2 447 Опубликовано 3 Мая 2017 Поделиться Опубликовано 3 Мая 2017 @TIGER_VLAD, может, так? local delta = 0.05 -- подобрать опытным путём: чем больше, тем быстрее function noclip_upd() if noclip_active == true then local position = db.actor:position() local direction = device().cam_dir db.actor:set_actor_position( position:add( direction:mul( delta ) ) ) end end 1 1 2 Аддон для ОП-2.09.2: Яндекс/Google/GitHub Ссылка на комментарий
trantat 1 Опубликовано 3 Мая 2017 Поделиться Опубликовано 3 Мая 2017 Кому не сложно, подскажите нубу, как в ЗП получить ID любого предмета, на который указывает игровой курсор, в инвентаре актора или обшариваемого NPC/монстра. Ссылка на комментарий
TIGER_VLAD 361 Опубликовано 3 Мая 2017 Поделиться Опубликовано 3 Мая 2017 (изменено) @naxac, Да пробовал уже так. Вот так этот код работает . Получается, что ГГ летит не по направлению взгляда ( То есть я например повернул камеру влево/вправо где-то на 20-30 градусов, а направление не меняется, стоит мне повернуть больше и только тогда направление меняется). Думаю сам телепорт(db.actor:set_actor_position) актора нужно как то привязать к аргументу delta метода update, так как скорость телепорта зависит от фпс. На видео видно, что скорость на краях локации сильно увеличивается. local delta = 0.05 -- подобрать опытным путём: чем больше, тем быстрее пробовал от 0.5 - 0.00005 все равно скорость большая Изменено 3 Мая 2017 пользователем TIGER_VLAD Ссылка на комментарий
dsh 3 824 Опубликовано 3 Мая 2017 Поделиться Опубликовано 3 Мая 2017 @TIGER_VLAD, ну естественно скорость зависит от фпс, т.е. от частоты выполнения апдейта. Ведь ты же на каждом апдейте меняешь позицию. Умножай дельту на кол-во секунд, прошедших с прошлого апдейта, что-ли. Текущее время в миллисекундах возвращает time_global(). На каждом апдейте его сохрани, вычти из него предыдущее значение, раздели на кол-во миллисекунд в секунде и умножь на дельту. В этом случае, дельтой будет задаваться скорость в секунду реального времени. Как-то так. 1 dsh mod: https://github.com/dsh2dsh/op2ogse Ссылка на комментарий
mortan 143 Опубликовано 3 Мая 2017 Поделиться Опубликовано 3 Мая 2017 @trantat, тебе для этого придётся двигло править, только я не могу понять зачем это может быть нужно. Ссылка на комментарий
trantat 1 Опубликовано 3 Мая 2017 Поделиться Опубликовано 3 Мая 2017 @mortan, чтоб можно было разобрать через нет-пакеты свойства любого предмета. К примеру для показа простым наведением курсора какие именно патроны заряжены в конкретный ствол.Мне нужно скриптовое решение, чтобы можно было и для ЧН адаптировать если надо. Правка движка ни разу не универсальный прием. Ссылка на комментарий
Shkiper2012 35 Опубликовано 4 Мая 2017 Поделиться Опубликовано 4 Мая 2017 @TIGER_VLAD, Если используешь движок, где есть коллбэки на нажатие/удержание/отпускание клавиш (например, X-Ray extensions), то можно попробовать так: [spoiler=noclip.script] --[[ ------------------------------------------------------------------------------------------------------- -- File: noclip.script -- Description: Noclip режим (режим свободного полета). --]] ------------------------------------------------------------------------------------------------------- local debug_log = true -- Пишем лог? Да = true / Нет = false local module_init = true local module_name = script_name() local function dbg_logf(fmt,...) if debug_log then log1(fmt,...) end end noclip_active = true -- Вкл. = true / ВЫКЛ. = false local distant_step = 1 -- Кол-во метров, на который смещается камера в режиме NOclip. -- Вкл./ВЫКЛ. режима NOclip. -- function noclip_ON_OFF() if (noclip_active == true) then dbg_logf("~~noclip >>> OFF ") noclip_active = false -- ВЫКЛ.режим бога. -- local console = get_console() console:execute("g_god off") else dbg_logf("--noclip >>> ON ") noclip_active = true -- Вкл.режим бога. -- local console = get_console() console:execute("g_god on") end end -- Коллбэк на удержание клавиши. -- function on_key_hold(key, bind) if (noclip_active == false) then return true end -- kR -- +1 метр к скорости! -- if bind == key_bindings.kWPN_RELOAD then distant_step = distant_step + 1 end -- kT -- -1 метр к скорости! -- if bind == key_bindings.kWPN_FUNC then distant_step = distant_step - 1 if distant_step <= 0 then distant_step = 1 end end -- kW -- Вперед! -- if bind == key_bindings.kFWD then local position = db.actor:position() local direction = device().cam_dir db.actor:set_actor_position(position:mad(direction, distant_step)) end -- kS -- Назад! -- if bind == key_bindings.kBACK then local position = db.actor:position() local direction = device().cam_dir db.actor:set_actor_position(position:mad(direction, (-distant_step))) end -- kA -- Стрейф влево! -- if bind == key_bindings.kL_STRAFE then local position = db.actor:position() local direction = device().cam_right db.actor:set_actor_position(position:mad(direction, (-distant_step))) end -- kD -- Стрейф вправо! -- if bind == key_bindings.kR_STRAFE then local position = db.actor:position() local direction = device().cam_right db.actor:set_actor_position(position:mad(direction, distant_step)) end -- kSpace -- Наверх! -- if bind == key_bindings.kJUMP then local position = db.actor:position() local direction = device().cam_top db.actor:set_actor_position(position:mad(direction, distant_step)) end -- Left SHIFT -- Вниз! -- if bind == key_bindings.kCROUCH_TOGGLE then local position = db.actor:position() local direction = device().cam_top db.actor:set_actor_position(position:mad(direction, (-distant_step))) end end if module_init then dbg_logf("**DBG: LOADING MODULE: "..module_name..".script -- Ok. ") end Во время режима NOclip я включаю режим бога, чтоб гг не застрелили пока он летит до пункта назначения. Клавишами R(по-умолчанию "Перезарядка") и T(у меня это = "Переключение на подствольник") регулирую скорость (а точнее, кол-во метров на которое смещается камера). Клавиши: W,A,S,D - управление как обычно. 1 1 Адаптация мода "AtmosFear" для мода "Боевая Подготовка" v.2.0.2. Адаптация мода "Магазинное питание" для мода "Боевая Подготовка" v.2.0.2. Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти