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

Справочник по функциям и классам


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

Помнишь мою идею откомментировать луа_хелп?

Считаю,мастхэв.

 

Например первый вопрос:

function release(alife_simulator*, cse_abstract*, boolean);

Никогда не понимал,зачем тут boolean?

И,как я понимаю,оно ведь не обязательное?

 

И написать в луа_хелп коммент

function release(alife_simulator*, cse_abstract*, boolean); -- Удаление обьекта(№переменной: ее значение)

 

malandrinus, не пробовал false ставить?Есть мнение,что может тогда обьект не удалится...

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

Ну тогда уж так:

alife_simulator - класс для управления серверными объектами. В игре существует всего один экземпляр такого класса, и получить его можно с помощью вызова глобальной функции alife().

  Список методов (Показать)

 

В придачу про класс vector.

vector - вспомогательный класс, содержащий три координаты, и позволяющий выполнять с ними различные манипуляции. Объекты класса vector являются аргументами многих функций и возвращаются многими функциями. См. например выше про метод create класса alife_simulator.

Отдельный объект класса вектор создаётся вызовом глобальной функции vector(). При создании имеет координаты [0,0,0].

  Список методов класса vector (Показать)

 

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

НУ не знаю надо это или нет,но напишу....

 

Lua(в Сталкере,дальше буду просто писать Lua ) можно использовать не только для игрового процесса...

Доступны основные(а может и все)

команды(функции)

к примеру Оператор ввода/вывода..работа с фаилами и т.д.(Возможно,только в ЧН....)

вот простой пример:

  Цитата
function to_my_log(text)

io.open("gamedata\\solinx_log.txt","w"):write( text, "\n" )

io.open("gamedata\\solinx_log.txt","w"):close()

end

Рассмотрим подробнее

io.open(filename) - "открывает" для каких либо целей filename

:write(text,"\n") - оператор вывода,выводит(читай вписывает) в фаил открытый с помощью io.open , строку text...после переходит на следующую строку(есть ещё:"\t","\w")

:read(text) - оператор ввода,вводит (читай "читает") из фаила открытого с помощью io.open,строку текст

:close() - закрывает фаил открытый с помощью io.open

 

статьи по Lua(основам) можно найти тут http://www.lua.ru/doc/

 

Также есть функции "преобразования" ,как в любом языке(скриптовом,программирования)

Преобразование числового значения(любого) в строку:

tostring(c)

где с - это число

Преобразование строки в число:

tonumber(string)

где string - это строка (вдруг кто не в курсе :))

 

Особенность Lua(по моему только в нём так,хотя кроме Lua только питон смотрел):

что после основных операторов(циклов,условного и т.д.)(if ,for,while...)

ставится end

пример:

 

if then

else

end

 

for i,c do

end

 

while "true" do

end

 

 

Ещё одной особенность LUА ,можно назвать работу с массивами(читай "таблицами") без цикла

 

пример:

local tbl={}

 

--заполнение

function objparams_to_tbl(obj)

if isstalker(obj) then

tbl.sec =obj:section()

tbl.hp=obj:health

....

end

end

 

 

--применение

function objparams_to_msg()

news_manager.send_tip(db.actor,"obj:section ="..tbl.sec.."obj:health ="..tostring(obj.hp),nil,nil,1000)

end

 

Массив можно очистить/заполнить/прочитать/преобразовать....

 

И совет:Пользуйтесь SCiTE или любой другой редактор с выделением синтаксиса....

 

по alife_simulator

dont_has_info(const number&, string); - проверка на Неполученный инфопоршень(db.actor:dont_has_info("infoportion") или alife():actor():dont_has_info("infoportion")).
has_info - противоположная

 

Работа с фаилами:

Через системный фаил(systems.ltx)

 

system_ini():r_string(section,key) -- получение строки из секции[section ] и ключа key

system_ini():r_bool(section,key) --получение булевого значения (true,false) из секции[section ] и ключа key

system_ini():r_s32(section,key) --получение (целого?)числа из секции[section ] и ключа key

system_ini():r_float(section,key) --получение числа(с плавающей точкой) числа из секции[section ] и ключа key

 

Через другой фаил(который не прописан в системе)

 

local ini =ini_file("") -- путь до фаила (обьявляем переменную которая хранит имя и путь).Дальше также как и с системным фаилом

 

ini:r_string(section,key) -- получение строки из секции[section ] и ключа key

ini:r_bool(section,key) --получение булевого значения (true,false) из секции[section ] и ключа key

ini:r_s32(section,key) --получение (целого?)числа из секции[section ] и ключа key

ini:r_float(section,key) --получение числа(с плавающей точкой) числа из секции[section ] и ключа key

 

Вспомогательные функции

 

system_ini():line_exist( section, key ) -- проверяет существует ли в секции [section ] ключ key

system_ini():section_exist(section) --проверяет существует ли секция [section ]

 

EG:

0function eg()

1local ini=ini_file("gamedata\\test.ltx")

2if not ini then ini=system_ini() end

3if ini:section_exist("test_section") then

4if ini:line_exist("test_section","test_line") then

5return true

6end

7end

8end

 

1. - присваиваем переменной фаил

2. - проверяем существует ли фаил ,если нет то работаем с системой

3. - проверяем наличие секции в фаиле(системе)

4. - проверяем наличие ключа в секции из фаила(системы)

5. - возвращаем истину(нашли ключ)

 

Проверка ,что из себя представляет переменная

 

function check_type(obj)

if obj then

if type(obj)=="string" then

return "string"

elseif type(obj)=="number" then

return "number"

elseif type(obj)=="function" then

return "function"

elseif type(obj)=="boolean" then

return "boolean"

elseif type(obj)=="userdata" then

return "userdata"

elseif type(obj)=="table" then

return "table"

end

end

end

 

 

 

 

Теперь по порядку...

Если obj это строка ,то возвращаем "string"

Если же obj это число ,то возвращаем "number"

Если же obj это функция ,то возвращаем "function"

Если же obj это булево значение ,то возвращаем "booolean"

Если же obj это юзердата(хз что это),то возвращаем "userdata"

Если же obj это таблица, то возвращаем "table"

 

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

 

 

класс CUIScriptWnd (); --для работы с окном....

Где знаю или догадываюсь поставил коментарий ....

    function _construct();
    function Register(CUIWindow*);
    function Register(CUIWindow*, string);
    function Enable(boolean);        --вкл/выкл
    function SetHeight(number);  --установка высоты
    function GetFrameLineWnd(string);
    function SetHolder(CDialogHolder*);
    function GetWidth() const;  --получение ширины контрола
    function GetCheckButton(string);--Получение состояния checkBox ,на выходе true или false?
    function DetachChild(CUIWindow*);
    function SetPPMode();
    function SetFont(CGameFont*);  --установка шрифта по имени
    function IsShown();                --проверка видно ли контрол иль нет?
    function Show(boolean);            --показывать контолили нет?
    function GetHeight() const;        --возвращает высоту
    function SetWidth(number);        --устанавливает ширину
    function GetListWndEx(string);
    function IsEnabled();
    function ResetPPMode();
    function GetPropertiesBox(string);
    function GetFont();                --возвращает шрифт установленный setFont?
    function Update();
    function AddCallback(string, number, const function<void>&); --соответские контрола с действие?
    function AddCallback(string, number, const function<void>&, object);--соответские контрола с действие?
    function GetButton(string);--Получаем последнюю нажатую кнопку?
    function SetAutoDelete(boolean);
    function OnKeyboard(number, enum EUIMessages);--Колбек нажатия на клавиатуре
    function Dispatch(number, number);
    function GetListWnd(string);--получение окна ListBoxa?
    function AttachChild(CUIWindow*);
    function GetStatic(string);--получение текста метки
    function SetWndPos(number, number);--установка позиции окна(x,y)
    function GetTabControl(string);
    function GetRadioButton(string);--состояние RadioButtton на выходите true или false
    function Init(number, number, number, number);--инициализация окна...читай FormInitializatione (x,y,width,height)
    function Init(Frect*);--инициализация окна
    function GetFrameWindow(string);
    function WindowName();
    function GetDialogWnd(string);
    function GetHolder();
    function SetWndRect(Frect);--установка координат углов
    function SetWndRect(number, number, number, number);--установка координат углов
    function GetEditBox(string);--получение текста из ЭдитБокса
    function SetWindowName(string);--Устанавливаем имя форме(caption)
    function GetProgressBar(string);
    function GetMessageBox(string);
    function SetWndSize(number, number);
    function Load(string);
    function IsAutoDelete();

Изменено пользователем меченый(стрелок)
  • Нравится 1
Ссылка на комментарий

В языке Lua нет классов. Их поддержка добавлена с помощью технологии Luabind. С одной стороны - это конечно имитация "настоящих классов", с другой - расширение выглядит настолько органичным, что практически воспринимается как часть синтаксиса языка.

 

  Создание своего класса (Показать)

 

  Наследование от экспортированных классов (Показать)

 

Изменено пользователем Kirgudu
  • Нравится 1
  • Полезно 1
  Полезный утиль (Показать)
Ссылка на комментарий
  RvP писал(а):
выносите продвижения в шапку плиз
Делать мегашапку пока рано, ещё даже одной страницы темы нет =)

  Monnoroch писал(а):
а не мог бы ты дополнительно рассмотреть пару примеров собственно из сталкера?

С такими же детальными пояснениями.

На очереди object_binder. Там и рассмотрю.

 

А пока вот:

  Функции времени (Показать)
Изменено пользователем malandrinus
  Полезный утиль (Показать)
Ссылка на комментарий
  Наверное, все знают, но на всякий пожарный расскажу структуру Lua_help (Показать)
Изменено пользователем Kirgudu
Ссылка на комментарий

Добил object_binder. Получилось многовато, но короче никак. Кроме того, пришлось разбить на две части. Для начала - некоторое введение в ситуацию со скриптовой моделью вообще. В основном трёп всякий =)


  Несколько общих слов об архитектуре и скриптовой модели сталкера (Показать)


Данная статья посвящёна классу object_binder и, кроме того, является в каком-то смысле иллюстрацией к одной из предыдущих статей "Наследование от экспортированных классов".
  Описание класса object_binder (Показать)


На очереди net_packet. Простой, но весьма важный класс.
  Описание класса net_packet (Показать)


  Использование объектов класса net_packet (Показать)


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

Кое-что по классу patrol, то, что сам понял.

 

  lua_help: class patrol (Показать)

Мои работы:

Ночные прицелы + смена ножевого слота

AI вертолетов + ПЗРК

Soul Cube

 

Работаю только с ТЧ. С ковырянием ЧН/ЗП не связываюсь ни в какой форме. Совсем.

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

Несколько уточнений:

  Kirag писал(а):
Этот класс отвечает за движение неписей по путям. Информацию о путях берет только из алл.спавна. Переопределить это нельзя без ковыряния в движке, откуда следует невозможность задавать пути извне алл.спавна. Для решения этой задачи надо как-то обойти класс patrol.
Файл all.spawn можно дописывать, добавляя туда дополнительные точки переходов. Вопреки распространённому мнению, новую игру при этом начинать не надо.

 

  Цитата
index(string) - нет ни примеров использования, ни предположений, что это могло бы значить.
Вроде как это метод, обратный name. Т.е. по имени точки возвращает её номер.

 

  Цитата
Как обрабатываются связи между точками, до конца не ясно, могу только предположить, что для этого служит одна из этих команд:

patrol...

Но которая, и что она возвращает, и что требует в качестве аргументов - непонятно.

Это такие же конструкторы, как и patrol с одним только именем пути. Просто у них ещё есть дополнительные аргументы.

 

И, как мне думается, за само движение отвечает класс entity_action, которому передаётся объект класса move, у которого patrol - это аргумент. Короче, копать и копать ещё, но начало неплохое. Там глядишь, и разберёмся, как свои скриптовые схемы ваять.

  Полезный утиль (Показать)
Ссылка на комментарий
  Kolmogor писал(а):
Про новую игру при добавлении путей вроде никто и не говорил :unsure: Про новую игру говорят при добавлении новых объектов, изменении старых

Я добавил level_changer, доспавнил его функцией create(<номер>) и ничего мне за это не было =)

 

Если кому это надо, то добавлю вот что. Я делал тестовый объект на кордоне, и сначала попробовал добавить секцию в файл для кордона. Выяснил, сколько всего объектов, сделал секцию с номером, на один большим...

У меня заспавнился не тот. Начал выяснять, откуда он взялся, и понял, что это последний объект из последнего уровня (ящик какой-то). Тогда я просто добавил новый объект в конец последнего уровня, и все получилось.

Мораль, номер объекта из all.spawn - это просто его номер в порядке компиляции. Зачем acdc разбирает объекты по уровням, не знаю. Но на мой взгляд, после этого они перетасованы. Если каждый раз начинать игру заново, то это и без разницы. Но если мы хотим использовать пересобранный all.spawn не начиная игру заново, то видимо acdc не годится.

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

Вот кст рабочая команда... по партулю.

local objt = level.object_by_id("5822")
objt:set_patrol_path("bar_bar_guard_walk", patrol.nearest, patrol.continue, true)

делает патрульный путь у парня в баре, который стоит у табличке при повороте направо.

Только вылет происходит.

  ошибка (Показать)
Изменено пользователем Taroz
Ссылка на комментарий

В качестве разминки разберём класс render_device. Один из тех классов, про который должен знать каждый модостроитель, а между тем практически незамеченный.

 

  Описание класса render_device (Показать)

 

 

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

 

  Функция проекции точки на экран (Показать)

 

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

На очереди класс FS. Если кому интересно, то внутри самого движка он имеет имя CLocatorAPI. Это класс для работы с файловой системой и файлами.

  Описание класса FS (Показать)

 

Ещё один класс, имеющий отношение к файловой системе - это CSavedGameWrapper. С помощью этого класса можно получить информацию о сохранённой игре

  Описание класса CSavedGameWrapper (Показать)

 

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

Попробуем приступить к game_object. Это класс для доступа к онлайновым (клиентским) объектам. Причём один класс является интерфейсом для совершенно разных объектов. Разработчики не придумали ничего лучше, как взять и объединить в одном классе все интерфейсы всех клиентских объектов: актора, сталкеров, монстров, физических объектов, автомобилей и лампочек, вообще всех. Более странного и вообще говоря уродливого объектно-ориентированного дизайна я ещё не видел. Во-первых, класс вышел совершенно необозримым - три сотни методов! Во-вторых, вызов не подходящего метода для произвольно взятого объекта приводит к совершенно непредсказуемым результатам. В лучшем случае не будет ничего, а чаще всего - будет вылет, причём обычно без лога. Наконец, описание этого класса в lua_help совершенно невнятное (как впрочем и всех остальных классов): типы возвращаемых значений опущены, типы входных аргументов указаны не всегда, а о назначении большинства методов можно только гадать. Предлагаю несколько более внятное описание. Источником информации служил в первую очередь документ из билда 1935, где описаны (весьма лаконично) многие методы этого класса. Во вторую очередь использована отладочная информация из мультиплеерных билдов, что позволило довольно точно восстановить типы аргументов и возвращаемых значений. Для некоторых функций имеются описания, полученные либо мной лично либо подсмотренные на форумах. Так что предлагаю рассматривать всё это как плод коллективного творчества.

Пара замечаний:

1. Информация по-любому неполная. Многие (скорее даже большинство) методы не описаны, хотя типы аргументов и возвращаемых значений имеются полностью.

2. Вследствие большого объёма причёсывать сил не осталось, так что выкладываю как есть. В некоторых местах осталась информация стороннего характера - сравнение с ранними билдами, внутренние названия функций и некоторые мои собственные домыслы.

3. Я перетасовал список методов с целью их осмысленной группировки "по родству". Очевидно, что мог и заблуждаться насчёт "родства" методов, так что смотрите в оба.

4. Поскольку описание не закончено, то предлагаю всем поучаствовать в завершении этого этапа.

 

  Описание класса game_object: (Показать)
Изменено пользователем malandrinus
  Полезный утиль (Показать)
Ссылка на комментарий
  Регистрация скриптовых классов с помощью object_factory (Показать)

 

Изменено пользователем Kirgudu
  • Нравится 1
  Полезный утиль (Показать)
Ссылка на комментарий

Nekt, Спасибо :)...

malandrinus, желаю приятной поездки...

Ну и чтобы как-то разбудить тему расписал малюсенький класс.Мало кто им пользуется(что ИМХО плохо).Этот класс позволяет хранить данные в конфиг-файлах(что даёт возможность пользователям более легко править под себя параметры и т.д.).Раньше я расписывал некоторые методы класса,но всё таки.

  class ini_file (Показать)
Изменено пользователем меченый(стрелок)
Ссылка на комментарий

Небольшой апдейт. Сегодня разберём глобальные функции или иначе функции из пространств имён. Такая функция в любом месте вызывается следующим образом:

<пространство имён>.<имя функции>(<список аргументов>)

Пространства имён - это всего лишь способ сгруппировать функции по некоторому признаку. Хотя надо заметить, что логика группировки функций в сталкере иной раз не поддаётся объяснению.

Всего есть несколько пространств имён: безымянное (т.е. функции их него вызываются просто по именам как обычные глобальные функции), game, level, relation_registry, actor_stats. В ЧН (и ЗП) появилось пространство имён main_menu, кроме того есть незначительные изменения в остальных: некоторые функции исчезли, некоторые добавлены. Изменения однако незначительны.

Сейчас рассматриваем только три основных пространства имён (безымянное, game, level) и только для ТЧ.

 

  Безымянное пространство имён (Показать)

 

  Пространство имён game (Показать)

 

  Пространство имён level (Показать)

 

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

Чуть дополнил описание game_object (см. пост ранее). Продублирую изменения в этом посте.

 

  дополнения к описанию game_object (Показать)

 

 

 

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

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

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

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

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

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

Войти

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

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

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

×
×
  • Создать...