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

Nazgool

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

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

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

  • Дней в топе

    1
  • AMKoin

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

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

  1. Понятное дело что тягаться не выйдет, но может кто-то заинтересуется и кому-то понадобиться? Сделал пока в чистом lua. Ну сделал это несколько громко сказано. Тестировать нужно. Описание :
  2. xStream Очень интересно глянуть на таймеры. Хочу посмотреть (подсмотреть) решения профессионала и сравнить со своими. Как скоро это можно будет сделать?
  3. Nazgool

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

    Вот это я имел в виду. Если изначально составить строку как нужно... То они и не будут содержать... А значит и паттерн... А в общем прошу прощения, т.к : P.S. 2Всем. В силу всего услышанного о "псевдо"классах в lua, и их несостоятельности, не стану скорее всего выкладывать наработки таймеров. А то забьют на. 2Artos На днях отдам их тебе(есть пару тонкостей - нужно доработать). Если посчитаешь нужным, и, я так надеялся, таймеры окажутся действительно полезными, то... Дай то Бог.
  4. Nazgool

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

    Dennis_Chikin, Artos Вопрос для меня очень интересный, поэтому заранее извиняюсь, но как-то не сумел понять где и что нужно искать в упомянутых Вами строках. Мне кажется, что если Вы ищите среди множества записей в исходной строке (и искомым разделителем есть символ точки, как определяющий модуль и объект), а также разделителем выражений в подобных строках , как правило, является символ пробела, то... Если я всё не правильно понял, то можете и не пояснять. Просто в моём понимании на данный момент я бы использовал паттерен : ... func:match('%S+%.%S+') Как бы и не очень важно, но при работе функции, сравнение с тем, что текущий символ не пробел, выглядит для меня предпочтительнее, нежели сравнение текущего символа с символами из массива паттрена. Думаю что сравнительный тест скорости выполнения это подтвердит. Ну а если я ошибаюсь, то составлял бы искомую строку таким образом, чтобы она работала в унисон с подобным паттерном. Сразу прошу знающих людей пояснить, - "В чём я не прав?" С одной стороны кажется дико, что изначально хочу составлять строку. А затем к ней использовать, пусть и быстрый, паттерн. Паттерн ведь составить проще и динамичнее. Но с другой стороны иного поведения я ещё не встречал. Сложный паттерн заметнее тормозит, по сравнению со "сложной"(???) строкой.
  5. А это дело может пойти во вред? Я видать ещё на очень низкой ступени развития. ОК. Как я обещал - чуть позже - выложу таймеры. Я их создал именно с помощью метатаблиц со всеми сопуствующими... Просто ради души... Кому нужно "переведут" на luabind. Ещё раз простите. Хватит голословности. Буду ждать окончания праздника. Добавлено через 14 мин.: Ой. Очень нужно добавить. Тут я полностью поддерживаю точку зрения "модулей". Как говорят, - "Не нужно плодить сущностей". Для этого конечно нужен как минимум средний уровень знаний (того же Lua). Ведь это уже ООП.
  6. Не знаю кому как, а мне лишняя тренировка в создании метатаблиц, методов и т.д. никогда не помешает. Да и просто люблю это дело. Конечно я понимаю что тот же luabind уже создан для... А как же искуство? Хорошо, делайте кому как хочется... А я уж буду по старинке... Так ведь кому нужно - спросит, кто захочет - ответит. Насильно никто, никого, ни к чему не принуждает. Читал топик потихоньку. Не хотел говорить, но всё же... Как-то странно, что программисты такого уровня не знали о тех же замыканиях... Ещё раз повторю, - "А не для того ли топик, чтобы находить эти знания?". Прошу прощения за то, что "насорил". Удаляюсь.
  7. Не согласен. Как раз топик для того и создан, чтобы узнавать что-то новое о Lua. Почему бы тут не делиться знаниями? Мне иногда гораздо проще и конструктивнее сделать что-то на базе классов. И созданных в самом 5.1.4 Без всякого luabind.
  8. Поздравляю всех с Новым Годом. 2Artos По поводу упомянутых тобою таймеров - есть дополнения и улучшения. На днях выложу (когда приду в сознание).
  9. Nazgool

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

    Artos Если бы я знал что это должно быть критично, то может быть написал бы так (как вариант) :
  10. local i= 0.1+0.1+0.5 print(string.format('%.18f',i)) --> 0.699999999999999960 НО НЕ 0.7!!! if (i==0.7) then print("TRY") --> хоть и TRUE end Добавлено через 26 мин.: Да, для корректности кода : for i=0,1,.05 do print(i) end который даст неправильный результат. рекомендую использовать такую конструкцию : for i=0,20,1 do print(i*0.05) end Добавлено через 32 мин.: Да не стесняйтесь задавать вопросы про Lua. И я, и многие другие когда-то тоже начинали. Но в отличии от Вас мы всё это проходили методом проб и ошибок. А теперь уже есть немало доков (инструкций, сайтов), да и я, собственно, буду помогать чем могу. Главное стремление. Как думаете? Добавлено через 48 мин.: Тут высказывалось немало мнений ЗА и ПРОТИВ аддонов к сталкеру, но результат работы, в частности работу RvP, я бы не смог переоценивать. Пускай модули и так создавались при добавлении файла *.script, но теперь я (например) могу создать собственный класс, независимый от прихотей игры. Даже со своим расширением. Мне, к примеру, не нравится работа с файловой системой в сталкере. Теперь я могу воспользоваться своей, для меня более удобной. Я буду парсить *.ltx и *.xml так, как мне это хочется. Я буду даже работать с CMD, реестром (ну если мне это нужно будет). А debug это отдельная тема. Она как (вот уже укранский) суперечлива, так и однозначно (обьективно) полезна во многих ситуациях. Да и время подтвердило, что использование даже стандартных средств Lua избавило от многих проблем. Главное знать когда и где их применить. Добавлено через 26 мин.: На те Вам для напряжения (по Пуаро) серого вещества. Пока без комментариев : -- Перегрузка операции __add для конкатенации строк mt = {} function String(string) return setmetatable({value = string or ''}, mt) end function mt.__add(a, b) return String(a.value..b) end s = String('Hello') print((s + ' There ' + ' World!').value )
  11. Сорри. Мой адекват уже на уровне обезьяны. local i= 0.03+0.07+0.05 if (i==0.15) then print("TRY") end Ваше слово?
  12. Ооо. Люди заитересовались. А если так : local i= 0.1+0.1+0.3 if (i==0.4) then print("TRY") end И объясните - почему? (Не мне а всем)
  13. Так-ссс. Молчите? Скажу словами Билли (Николай Караченцов, х/ф "Человек с бульвара Капуцинов"), - "Настоящему мужчине всегда есть что сказать" (xStream - я применяю это изречение как метафору ).
  14. Пробило на писательство, поэтому решил дать немного информации. То ли скучно, то ли альтруизм возыграл... (то ли банально - водка )
  15. *Shoker* Создай функцию, внутри которой будет твой "кусок кода" и вызывай когда нужно. А вообще ответить сложно. Покажи что у тебя есть (или на примере) и объясни какую часть кода и когда ты хочешь выполнить. И по возможности подробнее.
  16. Nazgool

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

    Amicron Вот тут : в "Справочнике..." и тут : где-то в "Скриптовании..."
  17. Nazgool

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

    serega-gamer Moжет что-то типа такого подойдёт? :
  18. Nazgool

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

    RvP Не стОит заниматься селекционным выведением в инкубаторных условиях. Твой вариант найдет оба имени. Какое из них будет "настоящим"? Да никакое. Это синонимы. Как минимум нужно соблюдать следующие условия : 1. В глобальном пространстве имен должно быть только одно имя для функции. Иначе найдутся и остальные. 2. Из первого следует что синонимы должны быть локальны. А это значит что использовать поиск нужно только в области видимости этой локальной переменной. 3. Добавь сюда итерацию по всей _G, в отличии от простого и быстрого доступа по ключу, и ... "Жизнь" подобного варианта нужно будет поддерживать искусственно.
  19. Nazgool

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

    _Призрак_ Из Lua никак не узнаешь. Дело в том, что функции в Lua (как и table, thread и userdata ) являются так называемыми "first class" объектами, и они не имеют фиксированного имени. Одни функции могут быть значениями множества переменных, в то время как другие могут храниться только в полях таблицы. Ну например для какой-то функции у тебя существует 3 имени. И есть, тоже например, функция, которая должна определить имя. Какое имя из двух оставшихся она должна возвратить??? Подходящее имя для функции попадает в стек только при её вызове. И вот тут уже можно определить и её имя, и имена всех функций вызвавших данную, т.к. они тоже уже находятся на стеке. Для этого используется функция debug.getinfo . Например : function f1(stack_level) f2(stack_level) end function f2(stack_level) f3(stack_level) end function f3(stack_level) local t = debug.getinfo(stack_level) print(t.name) end f1(0) --> getinfo f1(1) --> f3 f1(2) --> f2 f1(3) --> f1
  20. Проще всего с помощью debug. Я раньше уже показывал, но повторю. Напиши где-нибудь в _g.script(конечно если используешь расширение от RvP): debug.setmetatable(nil, {__index = function() end, __call = function() end}) А дальше, если нужно выключить отдельную функцию, или весь модуль, просто присвой им значение nil: имя_модуля.имя_функции = nil -- отключаем функцию -- или имя_модуля = nil -- отключаем модуль целиком Все вызовы таких функций, или же модуля в целом будут возвращать nil, а не вылетать. Но тут есть ещё вопросы. Нужна ли возможность обратного включения? Сохранять ли состояние (включен\выключен)? Ну, в общем, ещё немало нюансов для создания полноценного функционала. Добавлено через 159 мин.: Полагаю что ты мало что понял из объяснений по load-ам, поэтому несколько примеров :
  21. Nazgool

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

    Shadows function CutWpn(name) return name:match('wpn_(.+)') or name end spawn_item_in_inv(CutWpn('wpn_ak47')) Т.е. любое оружие с префиксом wpn_ "прогоняешь" через эту функцию.
  22. Можно конечно, например телепортировать ГГ. Но это уже извращением называется. Изучай работу с АСDС и делай как положено, да и на будущее пригодится.
  23. Max_Plohih Так-с. Как бы это сказать? Я считал что ты работаешь с АСDС, поэтому и дал такой ответ. А хrSраwnеr... Ну во-первых с его помощью сделать подобное невозможно. Во-вторых, если ты хочешь продолжать работать с ним, то прийдется поискать тех немногих, кто ещё его использует. Потому что, в третьих, все уже давно пользуются АСDС. Что и тебе советую сделать.
×
×
  • Создать...