Перейти к контенту

Nazgool

Жители
  • Число публикаций

    618
  • Регистрация

  • Последнее посещение

  • Дней в топе

    1
  • AMKoin

    37 [Подарить AMKoin]

Весь контент пользователя Nazgool

  1. print(say_tbl[data]) И ещё, math.randomseed ничего не возвращает, поэтому записывать в переменную data нечего.
  2. Nazgool

    Скриптование

    @Zander_driver, На самом деле всё не так уж и плохо. Оператор '#' прекрасно работает с "правильными" массивами. Осталось только нам научиться работать с массивами также правильно table.insert и table.remove сделаны специально для этого и должны помочь. А поведение оператора '#' и его будущее в других случаях до сих пор не так однозначно. В PiL3 об этом написано в разделе 3.5. Оператор длины Особенно мне "нравиться" фраза самого автора: "поэтому большую часть времени оператор длины безопасен для использования" Как тебе такое?
  3. @Rozben, Не нужно хранить сообщения и исконки в разных местах. Во первых сложно сопоставлять какому сообщению соответствует какая иконка. Во-вторых можешь добавишь новое сообщение и забыть добавить иконку (или наоборот) Храни данные в одной таблице : local news ={ {"%c[255,249,223,206]Вова Тихий:%c[default] \\nВидел кровососа у заправки в Темной Долине. Осторожнее там.", "ui_iconsNpc_green_stalker_11"}, и т.д. Вот с таким вариантом сообщения не станут повторяться, пока не будут показаны все из таблицы news :
  4. Nazgool

    OGSE - Обсуждение и прохождение

    Да я то с удовольствием. Не первый день ведь А тестить как?
  5. Nazgool

    OGSE - Обсуждение и прохождение

    Закрыли флудилку, поэтому тут. Смотрю, вроде как кроме оружия проблем в моде больше нет никаких. Жаль что люди с мощными компами могут только находить недостатки и "хотеть чего-то". Я со своим калькулятором давно бы исправил многое. Но не судьба. Не тянет гадина. Вот взялись бы и помогли чем могли.
  6. Nazgool

    Скриптование

    Вот это и плохо. Ты сам себя ограничиваешь в тех возможностях, которые люди придумали спустя много лет использования box-версии. Вот смотри. Что такое назначение sid-а в исходном варианте? В all.spawn-е ты создаешь секцию и прописываешь в ней story_id. Кроме этого тебе нужно зарегистрировать этот sid в game_story_ids.ltx. А что такое этот game_story_ids? Это жестко фиксированное хранилище, основываясь на котором возможен поиск по alife():story_object(sid), и без которого все твои назначенные sid-ы будут до лампочки. Не знаю как это выглядит, но подозреваю что достаточно запутанно и не очень удобно. До настоящего времени люди старались, делали, и как сказал Чебурашка - "строили, строили и наконец построили". Построили так, что можно и обойтись без всего того, что ты делаешь по "старой технологии". Что же есть нового, чтобы больше не смотреть на all.spawn, как на спасательный круг в твоём случае? Как можно назначить sid "не отходя от кассы"? 1. В расширение X-Ray extensions есть метод alife():assign_story_id. 2. Есть универсальные хранилища. By Malandrinus например. 2а. Если всё то что сказано выше сложно, то есть самый простой вариант - расширение lua by RvP, о чем я и хотел тебе сказать несколько постов назад. Так вот о самом простом, последнем варианте ( и втором тоже). Есть стандартное фиксированное хранилище (game_story_ids), а есть возможность сделать такое же, но динамическое хранилище. Теперь подробнее. Например создаем сталкера: local sobj = alife():create("stalker", vector():set ... bla-bla Пока этот сталкер существует, для него остаются неизменными name и id sobj:name() sobj.id Поэтому можно "запоминать" его либо по name, либо по id. Имя для динамически заспавненных объектов составляется из имени секции и его id (Для данного варианта) sobj:name() == 'stalker' .. sobj.id Зачем такая сложность, проще запомнить его id, оно же и так уникально. И вот теперь сама фишка того, что люди и придумали. Ты можешь сохранять id так : 1 (приоритетно) . Используя хранилище Malandrinus-а local sobj = alife():create("stalker", vector():set ... bla-bla ogse_unist.set_value('my_sid_kakoj_to_stalker', sobj.id , "number") 2. Используя только расширение by RvP писать эти id в свой файл посредством библиотеки io. Теперь в любой момент, ты можешь не перебирая for i=1,65534 которое может не лагать только на мощных системах, определить id своего объекта сталкера Либо по первому варианту local id_my_stalker = ogse_unist.get_value('my_sid_kakoj_to_stalker' , 0 , "number") Либо по второму local id_my_stalker = my_sid.my_sid_kakoj_to_stalker И найти сам объект local obj = alife():object(id_my_stalker) -- по прочтённому id А теперь удаляй или что ты с ним хочешь сделать.
  7. Nazgool

    Скриптование

    @CRAZY_STALKER666, Если ты будешь спавнить все объекты, которым необходимо назначать sid через all.spawn, то тогда я ни о чем. Я о том что будет, если будешь спавнить что-то по имени секции динамически, т.е. (например) alife():create("stalker", vector():set ... bla-bla И тебе позже нужно будет найти именно этого сталкера из кучи остальных, так же заспавненных.
  8. Nazgool

    Скриптование

    Этот вариант я тоже тогда рассматривал. Но если ты будешь спавнить что-то через секцию alife():create("any_section", vector():set(... и т.д. и нужно будет это позже удалять. Снова for i=1,65534 ?
  9. Nazgool

    Скриптование

    @CRAZY_STALKER666, В крайнем случае, если стоит расширение lua, можно и самому организовать свой динамический аналог game_story_ids. И там хранить типа sid-ов объектов. Я так делал когда-то.Если интересно.
  10. Nazgool

    Скриптование

    @abramcumner, Ты в 5.3 тестируешь что-ли? Да и не важно, пусть в 5.3 и ошибка, но поля-то она правильно удаляет. Как же мне это ещё объяснить? Во-первых моё выражение "никуда не деваются" не верное. Признаю. Правильнее сказать "не определяются". И мои примеры с ipairs этому подтверждение. Во всем остальном остаюсь на своём. Вот то, от чего я отталкиваюсь, и что уже говорил - "lua до последнего старается сохранить таблицу как массив" Так вот о чем и говорю - НЕ я, сама lua определяет поле [8]=8 при "дырках" от 1-го до 7-го поля. А как она определяет что поле именно с индексом [8], а не [144] например? Не потому ли, что перед ним есть поля с индексами 1-7? Значит есть таки поля? Т.е. они определились как поля. И они (пока) не удаляются, а только зачищаются их значения. И я говорю, что записав t=nil мы только лишь изменяем значение. Нельзя сказать что я удаляю поле. Не нам это решать а lua Оно может ей пока и понадобиться, как я только что под спойлером показал. Именно об этом битый ... толкую. А остальное - это уже совсем другая история. Л.Каневский.
  11. Nazgool

    Скриптование

    @Desertir, Смотри. Из-за чего всё началось. Я сказал что t=nil не удаляет поле, а изменяет его значение. Кто действительно удаляет поле, так это table.remove Мне сказали что t=nil тоже удаляет поле Вот я и пытался показать что только t=nil не перестраивает таблицу. И при итерации поля в ней никуда не деваются в отличии от table.remove. Вот тут всё прекрасно видно Т.е. во втором случае next читает поля и дальше, как ни в чем не бывало. А значит никуда они не деваются. Просто я даю им новое значение - nil. С оператором # ещё яснее. Если t=nil отрабатывает нормально, то с table,remove ошибка - "position out of bounds". Т.е. снова. Хоть я nil и присваиваю, но поля остаются. Да, при повторном использовании полей уже не будет. lua приберет (и то не всегда. показывал уже с t={1.nil,3}). Но на этом этапе, выходит, никакого удаления полей нет. Поэтому и называю "изменение значения" а не "удаление".
  12. Nazgool

    Скриптование

    Да мне всё равно что она выдаст. Вернее я знаю что. Всяких вариантов и сам могу наклепать предостаточно. Я говорю про конкретный случай. Оператор # работает с массивом.Так? А ты сам говоришь Т.е. если это массив (раз # так отработал - факт), то есть и второе поле. И если бы не было второго поля, то t[3] показало бы nil в массиве. А тройка была бы в t[2] Но нет. Показывает 3. Значит всё-таки массив с тремя полями. И хоть я написал t[2]=nil, никуда оно не удалилось. Зачистилось значение - да. Уже не помню где, но читал в доках, что lua до последнего старается сохранить таблицу как массив, а не как хэш. Выражения "массив" и "хэш" не совсем точно определил, но думаю понятно что я имел в виду.
  13. Nazgool

    Скриптование

    @abramcumner, Я всё это знаю, читал, и слава Богу ещё помню. Не в этом дело. Сам факт. Ну вот посчитала lua в этот раз, что #t ==3. Так уж вышло что не 1. К примеру. Пишу : t = {1,2,3} t[2]=nil По Вашему удалил я его. Совсем. И след простыл. И поверил я что так и есть (к примеру). А lua мне пишет что 3 поля. И я ей ничего не делал. Сама, гадина, решила наплевать на мой nil. Врет и не краснеет. Теперь я больше не буду ей доверять. Сказали "нет поля" - значит нет. И точка. Пусть свои тройки и дальше пишет. Плевать я хотел.
  14. Nazgool

    Скриптование

    @Dennis_Chikin, Да я не конкретно оператор # рассматриваю. Вот поставь метатаблицу для t с __newindex, и присвой ключу значение nil. Вызывается же этот метаметод, а значит всё-таки не удаление, а изменение. Косвенно конечно, но в сумме мне достаточно для этой точки зрения.
  15. Nazgool

    Скриптование

    t = {1,nil,3} print(#t) --> 3 Понимать как кому угодно? Есть поле, или нет? Поэтому и считаю что это не эквивалентно удалению. Это уже пото-о-о-м, на основе того, что значение поля nil будет удаление. Но не на данный момент. На данный момент я ключу присвоил конкретное lua значение - nil.
  16. Nazgool

    Скриптование

    t=nil не удаляет поле, а изменяет его значение (хоть и nil, но тоже ведь значение) А вот table.remove выполняет pop, т.е. именно удаляет поле. Или я вообще не понял о чем тут идет речь?
  17. Nazgool

    Скриптование

    @PTB, В файле xr_effects.script смотри две первые функции. function disable_ui_elements function enable_ui_elements Там всё предельно ясно.
  18. Nazgool

    Скриптование

    Ага. Функция была ещё и на постоянном апдейте, а не по событию? Это я пропустил. Попутно ..... @CRAZY_STALKER666, Да чего уж там - обращайтесь. Пока деды живы )
  19. Nazgool

    Скриптование

    Как это Zander_driver ещё промолчал? @CRAZY_STALKER666, Ваши выражения и полностью противоречат друг другу. Если Вам "и так понятно", то тогда не может быть "вопросов по неработоспособности". Вам уже Zander_driver объяснил почему, а makdm дал готовый вариант. Ну а если есть вопросы, то Вам всё-таки не понятно. Вы уже определитесь, в какой части Вашего высказывания сейчас находитесь? Если всё ещё "есть вопросы по неработоспособности", то постараемся объяснить подробнее,
  20. Nazgool

    Скриптование

    Это в xr_kamp.script, Там придется поудалять : class "evaluator_see_deadman" class "evaluator_can_move_deadman" class "action_go_to_deadman" class "action_moving_deadman" В функции add_to_binder блоки : action = this.action_go_to_deadman action = this.action_moving_deadman и все строки с : "see_deadman" "can_move_deadman" "go_to_deadman" "move_deadman" Может что-то не доглядел, но ты поиском и сам найдешь.
  21. Nazgool

    Скриптование

    @Zander_driver, Я к чему спрашивал? На мой взгляд винегрет получается не с кодом, а именно с действиями. Поясню. Судя из кода, но нажатию кнопки 'b_exit' в инвентарь спавниться какой-то там "eat_ptb", а по нажатию кнопки "medkit_army" аптечка. Т.е., я так полагаю, исходя из этого, при нажатии пункта из списка что-то должно спавниться В инвентарь. А тут вроде как обсуждается составление списка из того, что УЖЕ ЕСТЬ в инвентаре.И ни слова о том что же с этим делать? Как-то не согласовывается с исходным кодом. Вот и спрашиваю.
  22. Nazgool

    Скриптование

    Объясни что именно должно происходить. И подробно, а то сейчас расскажу тебе что и как сделать, а потом выясняться подробности, которые заставят всё переделывать.
  23. Nazgool

    Скриптование

    @Kober(BRUC), Всё зависит от того, будешь ли ты использовать объекты созданных нпс и как. Если нет (скорее всего пока не будешь ), то как вариант -- тут таблица с координатами function spawn_z_escape_1(section, count) local data = math.random(#pos_tbl) count = count or 1 for i = 1, count do alife():create(section, vector():set(unpack(data.pos)), data.lvid, data.gvid) end end function r_zombie_1() spawn_z_escape_1("zombie_new_k_1", 2) end
  24. Nazgool

    Скриптование

    Даже не знаю как и отреагировать. @Kober(BRUC), Почитай доки. Там написано ровно столько, чтобы все стали гениальны Это код не окончательный, а только для разъяснения. Окончательный выглядит несколько иначе, т.к. ещё не всё разобрали.
  25. Nazgool

    Скриптование

    @Kober(BRUC), Ладно. Давай пойдем от обратного. Вот готовый вариант. Специально написал более развернуто, чтобы ты пошагово понимал что происходит local pos_tbl={ {lvid=261995, gvid=187, pos = {-15.300880,5.824976,292.832062}}, {lvid=261995, gvid=187, pos = {-13.200880,3.716976,292.832062}}, {lvid=261995, gvid=187, pos = {-11.400880,1.908976,292.832062}}, {lvid=261995, gvid=187, pos = {-19.100880,7.600976,292.832062}}, } function spawn_z_escape_1(section) local data = math.random(#pos_tbl) -- Один раз получить какую-то таблицу с координатами local lv = data.lvid --Левел вертекс local gv = data.gvid --Гэйм вертекс local pos = data.pos --Position - Это таблица с координатами x,y,z local x = pos[1] -- теперь уже из таблицы 'pos' получаем первое поле 'x' local y = pos[2] -- второе 'y' local z = pos[3] -- и наконец третье 'z' return alife():create(section, vector():set(x,y,z),lvid,gvid) --Около фермы end function r_zombie_1() spawn_z_escape_1("zombie_new_k_1") spawn_z_escape_1("zombie_new_k_1") end
×
×
  • Создать...