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

Рекомендуемые сообщения

Тема для обсуждения скриптов всего и всех в серии игр STALKER.


Задавая вопрос (!):
1. Внимательно изучите суть вопроса. Вопрос должен соответствовать выбранной Вами темы. Это поможет сохранить порядок и читабельность темы, а также облегчит поиск и понимание сего;
2. Изучите то, что уже есть в теме (пролистайте "руками", воспользуйтесь поиском на форуме);
3. Изучите информацию которая может вам помочь:

  Информация (Показать)

4. Дабы не превращать обсуждение в "кашу" разной информативной направленности, задавайте несколько вопросов по порядку (в разных постах) после того, как получите ответ на предыдущий вопрос;
5. "Спасибо" и тому подобное - будьте так любезны в ПМ. Если не любите писать в ПМ, в конце вопроса напишите фразу: "Заранее спасибо!" - или что-то в этом духе;
6. ПОЖАЛУЙСТА! Указывайте, для какой игры Вам необходима информация (ТЧ, ЧН, ЗП), если стоит мод - укажите название мода;
7. Если Вы что-то сделали и результат не такой, какой Вами задумывался, то, пожалуйста, приводите коды которые Вы изменяли/писали целиком! Это поможет другим правильно ответить на Ваш вопрос, а также оградит Вас от лишней писанины.
8. Оформляйте сообщение. Пользуйтесь тегами для того, чтобы отделить код от текста. Пишите грамотно - ПОЛЬЗУЙТЕСЬ ЗНАКАМИ ПРЕПИНАНИЯ.
9. И помните: «Правильно заданный вопрос – половина ответа».

 

Какие вопросы следует задавать, а какие нет...

  Читать рекомендуется. (Показать)

И последнее: очень рекомендовано к прочтению Правила форума
 


  • Спасибо 1
  • Полезно 2
Ссылка на комментарий

Нет ли тут подводных камней?

  Показать

 

Изменено пользователем -StalkMen-
Ссылка на комментарий

@-StalkMen-,

А чего сразу подводные? Тут надводные :)

Как Lua поймет что такое 'arg' в выражении 'unpack(arg)' ?
Сначала нужно эту переменную определить

function bind_function(func,...)
    local arg = {...}
    return  function ()
                return func(unpack(arg))
            end
end

То же самое нужно сделать и в функции 'bind_member'

 

Сразу отвечу на возможный следующий вопрос. Стандартная переменная 'arg' в Lua vs STALKER не работает.

Поэтому таблицу с переменным количеством аргументов нужно определять самому.

В принципе это можно считать подводным камнем )).
 

Изменено пользователем Nazgool
Ссылка на комментарий

@Nazgool, в функциях с неявным числом аргументов локальная таблица arg создается автоматически.

Функция bind_member от bind_function по сути ничем не отличается.

Ссылка на комментарий

@Nazgool,

У меня Lua 5.1.5, и то, что я написал робит.

 

"Шаблонность" в Lua зачётная, я блин больше времени убил, пока писал аналог на С++ того, что выше, а то, что ниже :russian_ru:...

 

  Показать

 

Такой вопрос, стоит вводить систему "эвентов" ? Вроде же вызовы двиг<->скрипты дорогие, значит надо их минимизировать.

Изменено пользователем -StalkMen-
Ссылка на комментарий
  -StalkMen- писал(а):

я блин больше времени убил, пока писал аналог на С++

Ну ты сравнил динамический и статический языки... Зато на плюсах надежно. Почти, гы.

  -StalkMen- писал(а):

Такой вопрос, стоит вводить систему "эвентов" ?

Этаж какую? Которую уже реализовали раза 2-3 профи и еще каждый любитель свою запилил? Или что то с движком связанное? Уточняй.

Прости мою придирчивость, но я поправлю, event произносится через И - "ивэнт"/"ивент".

ТЧ 1.0004. SAP и Trans mod

github

Ссылка на комментарий

@Desertir,

 

 

  Desertir писал(а):
Которую уже

Я не так давно снова стал сидеть на Сталкерских форумах, так что не всё знаю.

 

Движок? Определённо! Первое, что приходит в голову, апдейт биндеров.

 

Вообще я это всё начал из-за отсутствия апдейта, нормального, без всяких цепляний к чему-то там. (©мультиплеер)
+ Хочетцо модульную систему. Дописал в конфиге строчку, скрипт прописался, куда ему надо.

 

  Показать

 

  • Нравится 1
Ссылка на комментарий

 

 

  -StalkMen- писал(а):
аналог Sleep (в луа это wait )

Однако

  _G (Показать)
Ссылка на комментарий

Товарищи. Может, конечно, совсем нубский вопрос, но всё же.

Как получить количество строк в табличке?

Ну вот, допустим, есть табличка covers. В ней, соответственно, сложены укрытия на локации, с учетом кондишнов и инфопоршней. Дык вот как, сопсна получить число укрытий, которые там сложены? Подсмотрел, что можно написать #covers, но чегось не взлетает... По крайней мере, в лог не пишет, т.е. nil. Табличка заведомо заполнена. Не, ну можно нагородить конструкцию при заполнении, чтоб считало,но должен же быть способ...

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

 

 

  Romz писал(а):
но чегось не взлетает... По крайней мере, в лог не пишет, т.е. nil.

Ну, если у тебя Lua не хочет размер таблицы посчитать - видно оно\она на тебя шибко обиделось\лась...

Ссылка на комментарий
  # (Показать)
Изменено пользователем -StalkMen-
Ссылка на комментарий

Нужна подсказка по циклам

имеется вот такая конструкция

  Показать

Функция pos_check возвращает true если pos_new не попадает в некие границы, и false, если попадает.

Почему-то repeat / until приводит к бесконечному циклу...

Я пробовал ставить

  Показать

 

Всегда получаю зависание игры.

Или как ещё можно добиться, чтобы итерация не пропала зря. Потому что если сгородить конструкцию

  Показать


то цикл

		for i = 1, level_t.count do 

срабатывает, но  координаты в таблицу не кладутся, т.к. они неверные.

Мож чего невнятно объяснил, скажите, попробую разжевать...

Шаман - СисАдмин

Всяко-разно: для ЧН

Ссылка на комментарий

Потому что у тебя внутри цикла ничего не изменяется

  ... (Показать)
Изменено пользователем Shredder
  • Согласен 3
Ссылка на комментарий
  Charsi писал(а):
Nazgool, в функциях с неявным числом аргументов локальная таблица arg создается автоматически.

Даже обидно как-то. Ну ладно, допустим я этого никогда не знал. И решил проверить.

Написал бы что-то вроде :

function f(...)
    print(arg and arg.n)
end

f(1,2,3)

И в SciTE (читать стандартном lua) действительно увидел бы таблицу 'arg' с тремя полями.

Но вот запустив этот же код в игре (print у меня работает как log), напечатало бы 'nil'

Почему и сказал

  Цитата

Стандартная переменная 'arg' в Lua vs STALKER не работает.

Поэтому таблицу с переменным количеством аргументов нужно определять самому.

Изменено пользователем Nazgool
Ссылка на комментарий

Никогда не был силён в регулярных выражениях.
Требуется из строки вида, например, «aaa_bbb_ccc_ddd» вытащить подстроку от первого символа и до последнего подчёркивания включительно, то есть «aaa_bbb_ccc_», и присвоить это значение переменной средствами сталкеровского Lua. В строке могут быть буквы, цифры и подчёркивания, больше никаких знаков, регистр любой.
Может кто-нибудь помочь?

Свои работы и совместные проекты: ИнструментOGSM CSFinal StrokeHARDWARMOD

Полезное: модули АртосаXML парсер

Ссылка на комментарий

@Shredder, проще s:match('^(.*_)'), это если грубо, а если конкретно под тз, то так:

s1 = ''
for s in str:gmatch('[^%.%;%,]') do
s1 = s1..s
end

 


Как доделать думаю ясно.

  • Спасибо 1
  • Согласен 1
Ссылка на комментарий

Помощь требуется, однако...

Собственно условия задачки: есть некое кол-во(ну в пределах не более 20) биндеров неких объектов, в апдейтах которых вычисляется значение в диапазоне от 0 до 100. Есть ф-ция, которая будет отображать эти значения динамически в виде линейного индикатора(тот-же ProgressBar, к примеру), с условием, что отображать надо на одном индикаторе от 0(если все значения по 0) до самого максимального(если есть 0, 18 и 76 - то отображать 76). Уж извиняйте, не знаю как это грамотными словами обозвать.

Пока у меня думалка надумала такой вариант: заносить все значения из апдейтов в табличку. В ф-ции отображения, которую вызывать из этих-же апдейтов, парсить ее как-то так: 

local value_table = {}

function set_pos()
          local pos = 0
          for k, v in pairs(value_table) do
                    if v > pos(или v >= pos ?) then
                              pos = v
                     end
          end

          SetProgressPos(pos)
end

Хотелось-бы подсказку: как оптимально табличку организовать(или она вообще не нужна ?), как ф-цию отображения организовать ?

Ссылка на комментарий

Самое простое это сделать переменную, и обновлять максимальное значение. Либо если хочется таблицей, то таблицей и далее table.max какой-нибудь, то есть сортировка, но тут можно обойтись и без этого.

Ссылка на комментарий

Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий

Комментарии могут оставлять только зарегистрированные пользователи

Создать аккаунт

Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!

Зарегистрировать новый аккаунт

Войти

Есть аккаунт? Войти.

Войти
  • Недавно просматривали   0 пользователей

    • Ни один зарегистрированный пользователь не просматривает эту страницу.
×
×
  • Создать...