Перейти в начало страницы

Здравствуйте, гость ( Авторизация | Регистрация )

Gameru.net останавливает работу в связи с вторжением армии РФ в Украину. Следите за дальнейшими анонсами.
Support Gameru!

> Помощь по разделу

Сайт S.T.A.L.K.E.R. Inside / [ЗП] Параметры командной строки / Распаковщик ресурсов

> Скрипты
Орион
сообщение 13.07.2009, 11:34
Сообщение #201


Навий черны у ношьти
***************

Репутация:   377  
Группа: Забанен
Сообщений: 2210
Регистрация: 11.03.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа



FAQ

Lua в X-Ray

Список всех функций, переменных, классов и т.п. что используются в Сталкере находится по адресу:
Код
gamedata/scripts/lua_help.script

Для получения файла надо распаковать игру. Можно скачать, в принципе smile.gif Тут =>>Ссылко<<=
Уроки

Пример создания непися скриптами ЛУА. Автор: меченый(стрелок)
Скриптинг на инсайде



Сообщение отредактировал RayTwitty - 09.06.2018, 20:23


--------------------
нарушение правил п. 7.2
Перейти в начало страницы
 
15 страниц V  « < 9 10 11 12 13 > »   
Начать новую тему
Ответов
aka_sektor
сообщение 05.12.2017, 20:48
Сообщение #202


Грандмастер
**************

Репутация:   118  
Группа: Участник
Сообщений: 1788
Награды: 4
Регистрация: 04.04.2013




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 05.12.2017, 20:15) *
ставить колбек

Да, там ниже это и предложили: http://www.amk-team.ru/forum/topic/8806-co...;comment=350365

Вот только с колбеком on_item_take есть косяк, описанный в этом посте: http://www.amk-team.ru/forum/topic/6185-sk...comment=1122162

Цитата(RayTwitty @ 05.12.2017, 20:15) *
надо делать на net_spawn

Можешь показать?

Вообще, предложили дописать проверку актера на nil, вот так:
Код
function sad_predateli_pda()
if db.actor ~= nil and db.actor:object("sad_mudak_pda") ~= nil and not db.actor:has_info("sad_predateli_info") then
db.actor:give_info_portion("sad_predateli_info")
end
end


UPD:
Проверил - больше не вылетает.

Сообщение отредактировал aka_sektor - 05.12.2017, 21:05


--------------------


Те кто играют уже не забудут ​​​​​​​© Алексей Сытянов
Перейти в начало страницы
 
RayTwitty
сообщение 27.05.2018, 17:00
Сообщение #203


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Запамятовал, ключом таблицы в Lua может быть только строка или целое число?))

upd:
Цитата
Тип table (таблица) реализует ассоциативные массивы, это значит, что массив может быть проиндексирован не только числами, но и любым Lua значением, кроме nil и NaN. (Not a Number специальное значение для представления неопределенных и непредставимых числовых результатов, таких как 0/0.) Таблицы могут быть гетерогенными (разнородными); т.е. могут содержать значения всех типов (кроме nil). Любой ключ со значением nil не считается частью таблицы. И наоборот, любой ключ, не являющийся частью таблицы, имеет ассоциированное значение nil.

Действительно работает))
Код
local t1 = { [1] = "one" }

local t2 = { [t1] = "two" }

print(t2[t1]) --> "two"

Хотя на практике я не встречал, чтобы в качестве ключей использовалось что-то отличное от числа или строки.

Сообщение отредактировал RayTwitty - 27.05.2018, 17:30


--------------------
Перейти в начало страницы
 
TIGER_VLAD
сообщение 27.05.2018, 17:59
Сообщение #204


Опытный Игрок
****

Репутация:   4  
Группа: Участник
Сообщений: 54
Награды: 2
Регистрация: 26.07.2015




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 27.05.2018, 17:00) *
Запамятовал, ключом таблицы в Lua может быть только строка или целое число?))

upd:
Цитата
Тип table (таблица) реализует ассоциативные массивы, это значит, что массив может быть проиндексирован не только числами, но и любым Lua значением, кроме nil и NaN. (Not a Number специальное значение для представления неопределенных и непредставимых числовых результатов, таких как 0/0.) Таблицы могут быть гетерогенными (разнородными); т.е. могут содержать значения всех типов (кроме nil). Любой ключ со значением nil не считается частью таблицы. И наоборот, любой ключ, не являющийся частью таблицы, имеет ассоциированное значение nil.

Действительно работает))
Код
local t1 = { [1] = "one" }

local t2 = { [t1] = "two" }

print(t2[t1]) --> "two"

Хотя на практике я не встречал, чтобы в качестве ключей использовалось что-то отличное от числа или строки.


А еще для строковых ключей квадратные скобки можно не указывать:
local my_t = {green="зеленый", yellow="желтый", red="красный"}
Перейти в начало страницы
 
kiperenok
сообщение 09.06.2018, 19:56
Сообщение #205


Игровой Эксперт
***************

Репутация:   623  
Группа: Участник
Сообщений: 2474
Награды: 5
Регистрация: 14.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Объясните пожалуйста синтаксис второй строчки кода, что делает двоеточие ? Вообще интересует синтаксис двоеточия в Lua.

local visualMonitor = require( "com.ponywolf.visualMonitor" ) -- к локальной переменной visualMonitor подключить файл visualMonitor
local visMon = visualMonitor:new()


--------------------
Тушкан сцуко личность !
http://img.gameru.net/?v=19a26.jpg


Ado3е3be
Перейти в начало страницы
 
RayTwitty
сообщение 09.06.2018, 20:14
Сообщение #206


Игровой Бог
**********************

Репутация:   648  
Группа: Участник
Сообщений: 5354
Награды: 9
Регистрация: 24.09.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(kiperenok @ 09.06.2018, 19:56) *
Объясните пожалуйста синтаксис второй строчки кода, что делает двоеточие ?

Обращение к полю. Погугли операторы и метатаблицы Lua.

Вот неплохое руководство по Lua: https://yadi.sk/d/4EUvTWhzdnAve


--------------------
Перейти в начало страницы
 
kiperenok
сообщение 09.06.2018, 20:22
Сообщение #207


Игровой Эксперт
***************

Репутация:   623  
Группа: Участник
Сообщений: 2474
Награды: 5
Регистрация: 14.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(RayTwitty @ 09.06.2018, 20:14) *
Цитата(kiperenok @ 09.06.2018, 19:56) *
Объясните пожалуйста синтаксис второй строчки кода, что делает двоеточие ?

Обращение к полю. Погугли операторы и метатаблицы Lua.

Вот неплохое руководство по Lua: https://yadi.sk/d/4EUvTWhzdnAve

А так это просто книга Роберта Иерусалимски - просто интерактиваная. Спасибо что скинул ссылку. Че то бегло пробежался по метатаблицам и такого не увидел sad.gif


--------------------
Тушкан сцуко личность !
http://img.gameru.net/?v=19a26.jpg


Ado3е3be
Перейти в начало страницы
 
abramcumner
сообщение 09.06.2018, 20:27
Сообщение #208


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(kiperenok @ 09.06.2018, 20:22) *
Че то бегло пробежался по метатаблицам и такого не увидел sad.gif

А в операторах нет оператора двоеточие и в метатаблицах нет smile.gif
Двоеточие это синтаксический сахар для сокращения записи.
Запись
local visMon = visualMonitor:new()
эквивалентна
local visMon = visualMonitor.new(visualMonitor)

То есть объект перед двоеточием передается первым параметром в функцию.
А при объявлении функции через двоеточие в функцию добавляется первый аргумент self.

https://www.lua.org/manual/5.3/manual.html#3.4.11
Цитата
The colon syntax is used for defining methods, that is, functions that have an implicit extra parameter self. Thus, the statement
function t.a.b.c:f (params) body end
is syntactic sugar for
t.a.b.c.f = function (self, params) body end


Сообщение отредактировал abramcumner - 09.06.2018, 20:27
Перейти в начало страницы
 
kiperenok
сообщение 19.06.2018, 14:07
Сообщение #209


Игровой Эксперт
***************

Репутация:   623  
Группа: Участник
Сообщений: 2474
Награды: 5
Регистрация: 14.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


abramcumner помоги со следующим: rolleyes.gif

function instance:touch(event)
self.xScale, self.yScale = 0.95, 0.95
end


Как я это понял - self это первый скрытый параметр у функции, тогда получается у функции touch первым аргументом идет instance, а вторым event.
Тогда self.xScale равносильно instance.xScale ?


--------------------
Тушкан сцуко личность !
http://img.gameru.net/?v=19a26.jpg


Ado3е3be
Перейти в начало страницы
 
Neo][
сообщение 19.06.2018, 14:33
Сообщение #210


The One
****************

Репутация:   744  
Группа: Участник
Сообщений: 2715
Награды: 5
Регистрация: 05.12.2005




Вставить ник Цитировать выделенное в форуму быстрого ответа


kiperenok, по вопросу - в зависимости от того, как вызываешь touch и да, и нет smile.gif
Если вызываешь, как instance:touch(ev) или instance.touch(instance, ev) то да, если же как instance.touch(other_table, ev) то нет.

Я думаю эта ссыль отвечает на все вопросы )

Сообщение отредактировал Neo][ - 19.06.2018, 14:36


--------------------
Перейти в начало страницы
 
kiperenok
сообщение 19.06.2018, 15:36
Сообщение #211


Игровой Эксперт
***************

Репутация:   623  
Группа: Участник
Сообщений: 2474
Награды: 5
Регистрация: 14.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Neo][ @ 19.06.2018, 14:33) *
Я думаю эта ссыль отвечает на все вопросы )

Не в моем случае laugh.gif Там все на английском.


--------------------
Тушкан сцуко личность !
http://img.gameru.net/?v=19a26.jpg


Ado3е3be
Перейти в начало страницы
 
abramcumner
сообщение 19.06.2018, 16:12
Сообщение #212


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(kiperenok @ 19.06.2018, 14:07) *
Как я это понял - self это первый скрытый параметр у функции, тогда получается у функции touch первым аргументом идет instance, а вторым event.
Тогда self.xScale равносильно instance.xScale ?

Да, все правильно. Но это странный подход - разбирать код таким образом smile.gif
Тебе абревиатура ООП о чем-нибудь говорит? Объекты там, классы.

Цитата
Не в моем случае laugh.gif Там все на английском.

RayTwitty давал ссылку на эту же книгу на русском smile.gif
Перейти в начало страницы
 
kiperenok
сообщение 19.06.2018, 19:23
Сообщение #213


Игровой Эксперт
***************

Репутация:   623  
Группа: Участник
Сообщений: 2474
Награды: 5
Регистрация: 14.02.2009




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 19.06.2018, 16:12) *
RayTwitty давал ссылку на эту же книгу на русском smile.gif

Нашел в книге на русском эту главу, прочитал - вот теперь все понятно. Всем кто помог БОЛЬШОЕ спасибо ! wink.gif


--------------------
Тушкан сцуко личность !
http://img.gameru.net/?v=19a26.jpg


Ado3е3be
Перейти в начало страницы
 
atanda
сообщение 12.12.2018, 16:19
Сообщение #214
Pro gamer

Почти Игроман
*********

Репутация:   72  
Группа: Участник
Сообщений: 622
Регистрация: 05.11.2017




Вставить ник Цитировать выделенное в форуму быстрого ответа


Последняя luabind на текущий момент 0.7.1(2014 год) судя соурсфоржу и гиту. Проект в каком либо виде поддерживается на данный момент?

Сообщение отредактировал buffy - 12.12.2018, 16:19
Перейти в начало страницы
 
Marafonec
сообщение 27.09.2019, 18:39
Сообщение #215


Ветеран
*****

Репутация:   11  
Группа: Участник
Сообщений: 84
Награды: 3
Регистрация: 13.09.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Парни, может кто подсказать в чем кроется проблема?
Вот такой код
Код
for cf, sec in string.gmatch(str, "%s*([%\%.-_%w]+)%s*%|%s*([-_%w]+)%s*") do
валит игру с логом:
Код
SCRIPT SYNTAX ERROR:
c:\ogsr\gamedata\scripts\_utils.script:225: invalid escape sequence near '"%s*([%'

Использую недавно вышедший движок OGSR x64. На оригинальном движке ТЧ этот код работает безо вских проблем.
Перейти в начало страницы
 
Trollz0r
сообщение 28.09.2019, 01:37
Сообщение #216


Почти Мастер
***********

Репутация:   1357  
Группа: Участник
Сообщений: 1155
Награды: 5
Регистрация: 28.05.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Небось старый луа просто тихо удалял бекслеш, а новый уже не переваривает кривые ескейп-последовательности и хочет, чтобы ты экранировал \. Попробуй добавить ещё один бекслеш перед существующим. Хз как в огср, но в обычном луа5.3 оно вывелось без ошибок: https://rextester.com/live/XSSP38105


А что вообще должна делать эта регулярка?


--------------------
Сверхнарод, не желающий кормить своего уицраора шаввой, будет кормить чужого гаввахом!
---------------
------------
----------
--------
------
----
--
Перейти в начало страницы
 
abramcumner
сообщение 28.09.2019, 11:06
Сообщение #217


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Люпус Эст @ 28.09.2019, 01:37) *
А что вообще должна делать эта регулярка?

Ищет пары слов, разделенные вертикальной чертой.
Перейти в начало страницы
 
Marafonec
сообщение 28.09.2019, 13:07
Сообщение #218


Ветеран
*****

Репутация:   11  
Группа: Участник
Сообщений: 84
Награды: 3
Регистрация: 13.09.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Люпус Эст @ 28.09.2019, 01:37) *
Попробуй добавить ещё один бекслеш перед существующим.
Спасибо, помогло.

Цитата(Люпус Эст @ 28.09.2019, 01:37) *
Хз как в огср, но в обычном луа5.3 оно вывелось без ошибок
Судя по логу: "--LUA version: [LuaJIT 2.1.0-beta3]"

Цитата(Люпус Эст @ 28.09.2019, 01:37) *
А что вообще должна делать эта регулярка?
+++
--/summary/>> функция парсинга параметров файла "overrides_by_schemes.ltx"
function getTableValuesParam(str)
local all_els = {}
--'парсим скриптовые таблицы
for ft in string.gmatch(str, '%"%s*([-_%.%w]+)%s*%"') do
local base_tbl, file_name
local tbl_name = ft
for f, t in string.gmatch(ft, "([-_%w]+)%.([-_%w]+)") do
file_name = f
tbl_name = t
end
if file_name and tbl_name then
base_tbl = _G[file_name] and _G[file_name][tbl_name]
else
base_tbl = _G[ft]
end
if type(base_tbl) == "table" then
for k in pairs(base_tbl) do
table.insert(all_els, k)
end
end
end
--'парсим конфиговые списки параметров
for cf, sec in string.gmatch(str, "%s*([%\\%.-_%w]+)%s*%|%s*([-_%w]+)%s*") do
--'"%s*([%'
local ini = ini_file(cf)
if ini and ini:section_exist(sec) then
do
local ind = 0
repeat
local valid, id, value = ini:r_line(sec, ind, "", "")
if valid then
table.insert(all_els, id.." >> "..value)
end
ind = ind + 1
until (not valid)
end
end
end
--'парсим дополнительные параметры
for pm, list in string.gmatch(str, "%s*([%+%-])%s*%{%s*([-_%s%,%w]+)%s*%}") do
for el in string.gmatch(list, "%s*([^%,%s][-_%w]+)%s*") do
if pm == "+" then
table.insert(all_els, el)
end
if pm == "-" then
local ind = 0
for i, v in ipairs(all_els) do
if v == el then
ind = i
break
end
end
if ind > 0 and all_els[ind] then
table.remove(all_els, ind)
end
end
end
end
return all_els
end

Перейти в начало страницы
 
Pavel_Blend
сообщение 14.11.2019, 17:11
Сообщение #219


Продвинутый геймер
********

Репутация:   51  
Группа: Участник
Сообщений: 489
Награды: 3
Регистрация: 12.11.2012




Вставить ник Цитировать выделенное в форуму быстрого ответа


Я сегодня ещё раз начал вникать в луа. Частично прочитал несколько небольших учебников. Появились вопросы:

1) что это за слово class? Понятно, что создаёт класс, но в Notepad++ это ключевое слово даже не подсвечивается цветом. Такое ощущение, что эта вещь есть только в сталкеровских скриптах. Это слово class ведь не стандартная для языка часть?

2) как в луа работает система модулей и пакетов? В книжках пишут, что нужно использовать require. Но в сталкерских скриптах нету ни одного require. Я заметил, что модули используются без импорта. Например, если в папке gamedata\scripts есть файл my_module.script, то чтобы использовать функции из этого модуля, нужно сразу (без импорта) к ним обращаться: my_module.my_funct()
В питоне с модулями всё по-другому. Их всегда нужно импортировать так: import my_module, а потом использовать так: my_module.my_funct(). Но в луа я не совсем понимаю, как обращаться к коду из вне. Всё как волшебство какое-то. Пишем my_module.my_funct() и он сам импортируется что ли?

3) откуда растут ноги у скриптов сталкера? Какой скрипт вызывается самым первым? Что является началом работы скриптов?

4) как скриптом вывести в игровую консоль сообщение? printf вроде не работает.


--------------------
Перейти в начало страницы
 
abramcumner
сообщение 14.11.2019, 17:33
Сообщение #220


Игровое Воплощение
*********************

Репутация:   394  
Группа: Участник
Сообщений: 4791
Награды: 4
Регистрация: 27.04.2011




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(Pavel_Blend @ 14.11.2019, 17:07) *
1) что это за слово class? Понятно, что создаёт класс, но в Notepad++ это ключевое слово даже не подсвечивается цветом. Такое ощущение, что эта вещь есть только в сталкеровских скриптах. Это слово class ведь не стандартная для языка часть?

Это магия луа+луабинд.
Луа: при вызове функции с одним строковым(таблицей) параметром можно опускать скобки. Записи class("se_stalker") и class "se_stalker" эквивалентны.
Луабинд: добавляет функцию class и прочую обвязку. См. luabind open.cpp

Цитата
2) как в луа работает система модулей и пакетов? В книжках пишут, что нужно использовать require. Но в сталкерских скриптах нету ни одного require. Я заметил, что модули используются без импорта. Например, если в папке gamedata\scripts есть файл my_module.script, то чтобы использовать функции из этого модуля, нужно сразу (без импорта) к ним обращаться: my_module.my_funct()
В питоне с модулями всё по-другому. Их всегда нужно импортировать так: import my_module, а потом использовать так: my_module.my_funct(). Но в луа я не совсем понимаю, как обращаться к коду из вне. Всё как волшебство какое-то. Пишем my_module.my_funct() и он сам импортируется что ли?

Это магия движка. Если не находится таблица my_module, пытается подгрузить из одноименного файла .script.

Цитата
3) откуда растут ноги у скриптов сталкера? Какой скрипт вызывается самым первым? Что является началом работы скриптов?

Формально наверное _G.script. Но скрипты, привязанные к серверным и клиентским объектам, диалогам и прочему, вызываются "сами по себе".

Цитата
4) как скриптом вывести в игровую консоль сообщение? printf вроде не работает.

Если собрать движок без дефайна MASTER_GOLD работает и printf и log. Если на оригинальном движке, то только через console():execute("load ~~~"..escape(msg)). Типа загружаешь несуществующий сейв, движок ругается на его отсутствие и выводит твою строку smile.gif В принципе во всех модах есть уже готовая функция log/dbglog.
Перейти в начало страницы
 
Modera
сообщение 14.11.2019, 17:40
Сообщение #221


.
**********************

Репутация:   750  
Группа: Участник
Сообщений: 7072
Награды: 4
Регистрация: 30.07.2010




Вставить ник Цитировать выделенное в форуму быстрого ответа


Цитата(abramcumner @ 14.11.2019, 17:29) *
Это магия луа+луабинд.
Луа: при вызове функции с одним строковым(таблицей) параметром можно опускать скобки. Записи class("se_stalker") и class "se_stalker" эквивалентны.
Луабинд: добавляет функцию class и прочую обвязку. См. luabind open.cpp

Ещё стоит упомянуть что это функция возвращает функцию в которую передаётся базовый класс в скобках.
Это уже граничит с чёрной магией, но луабинд целиком на ней построен, так что не страшно.
Перейти в начало страницы
 

15 страниц V  « < 9 10 11 12 13 > » 
Ответить в данную темуНачать новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 28.03.2024, 22:05