Это популярное сообщение. Malandrinus 615 Опубликовано 8 Июля 2009 Это популярное сообщение. Поделиться Опубликовано 8 Июля 2009 (изменено) В данной теме собраны сведения по скриптовой модели сталкера: функции и классы, методы и свойства, взаимосвязь классов и последовательность работы с ними, связь работы классов и файлов конфигураций. К наполнению темы приглашаются все желающие. В наполнении темы непосредственно участвовали и существенно мне помогли: @Monnoroch, @Kolmogor, @Unnamed Black Wolf, @меченый(стрелок), @IQDDD, @Kirag, @Taroz, @dan, @7.9, @Garry_Galler, @AKKK1, @Bak и много других людей. Скрытый текст Скрытый текст класс alife_simulator. Базовые операции с серверными объектами. Пространства имён. Глобальные функции для большого числа задач. "Создание своего класса" и "Наследование от экспортированных классов". Базовые сведения об объектно-ориентированном программировании для сталкера. Необходимо прочитать, для понимания темы про биндер и некоторых других. В одном посте: Общие слова об архитектуре и скриптовой модели сталкера "Класс object_binder" расширение онлайновых объектов, колбеки, сохранение состояния. "Класс net_packet" Регистрация скриптовых классов с помощью object_factory Серверные классы. Часть 1 Иерархия серверных классов, описание не закончено. Серверные классы. Часть 2 Картинка структуры наследования и несколько заключительных слов Клиентские классы Скрытый текст Класс game_object Интерфейс ко всем онлайновым (клиентским объектам) Класс hit для нанесения урона скриптом и другая информация (IQDDD) Некоторая информация по управлению путями патрулирования здесь (Kirag) и здесь (Taroz) Неполная информация по управлению памятью неписей с примером здесь (Bak) Физическая оболочка объектов (Garry_Galler) Пост о выборе (подборе) оружия НПС и стрельбы (*Shoker*) Скрытый текст Управление заданиями Класс CGameTask и другие вспомогательные классы и функции. Управление инфопорциями Функции, колбеки, форматы файлов Список специальных системных инфопорций (Unnamed Black Wolf) Система профилей и алгоритм генерации имён. Форматы файлов, функции Дополнительная информация по параметрам профилей terrain_sect (Kolmogor) Диалоги. Часть 1 Форматы файлов, базовые сведения Диалоги. Часть 2 Скриптовые диалоги Диалоги. Часть 3 Тематическая подборка функций управления диалогами Скрытый текст Функции времени Тематическая подборка функций, связанных с управлением игровым временем. Класс CTime Вспомогательный класс для управления игровым временем Полезная скриптовая функция с использованием CTime (Garry_Galler) Скрытый текст class ini_file (меченый(стрелок)) Класс FS и CSavedGameWrapper Бинарный доступ к файлам, в том числе в игровых архивах, управление сохранёнными играми. Скрипт уровня. Забытая фишка с колбеком на заход на уровень Класс vector Некоторая полезная информация о разных вещах (меченый(стрелок)) "Класс render_device" Направление и положение камеры, характеристики экрана, программная пауза игры и др. Некоторая информация о различиях между ТЧ и ЗП в системе оконных классов и колбеков. (lekzd) Неплохо бы развить эту тему! Некоторая полезная информация о скриптовых функциях из модуля _g.script. (lekzd) Также требует развития! Полезные функции для работы с графом игры (Garry_Galler) В одном посте: Класс profile_timer Отладочные измерения скорости работы фрагментов программы Класс client_spawn_manager Колбек на выход в онлайн без использования биндера. Работа с консолью. Класс CConsole Анимации цвета. Класс color_animator Всякие моргающие элементы в окнах и пр. Управление постэффектами. Скриптовые постэффекты. Класс effector Класс sound_object. Проигрывание звуков в игре в произвольном месте, от произвольного объекта, в голове актора. (Shadows) Пост удалён автором (прим. Kirgudu) Скрытый текст Оконные классы Некоторая общая информация о создании окон Список методов, XML-тегов и событий для оконных классов (ТЧ/ЧН/ЗП) (Norman Eisenherz) Представление материала в моих статьях оптимизировано для онлайнового просмотра. Если кому не хочется лазить по спойлерам, а нужно просмотреть текст какого-либо поста "потоком", то могу рекомендовать просмотр в режиме "текстовая версия". В этом же режиме удобно сохранять содержимое темы на диск. (прим. Malandrinus) Изменено 30 Июля пользователем Kirgudu 5 5 16 Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Real Wolf 34 Опубликовано 15 Ноября 2010 Поделиться Опубликовано 15 Ноября 2010 (изменено) Может кто знает как работает константы\флажки из ui_events. Как работает кнопка я знаю, но как остальные не вполне понимаю. Вот к примеру там есть "INVENTORY_ATTACH_ADDON", как это можно использовать и можно ли вообще? Garry_Galler, Спасибо, но я уже разобрался. Вот теперь вопрос по ui_events. Изменено 15 Ноября 2010 пользователем Real Wolf Ссылка на комментарий
Malandrinus 615 Опубликовано 21 Ноября 2010 Автор Поделиться Опубликовано 21 Ноября 2010 Слегка обновил информацию в одной из старых статей, а именно про управление задачами (они же квесты). В описание класса SGameTaskObjective добавил информацию по заданию предусловий на провал и успех а также действий по провалу и успеху. Указаны соответствущие теги в XML описании. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
IQDDD 5 Опубликовано 26 Ноября 2010 Поделиться Опубликовано 26 Ноября 2010 А как в ЧН добавлять к ComboBox элементы? Ссылка на комментарий
Malandrinus 615 Опубликовано 26 Ноября 2010 Автор Поделиться Опубликовано 26 Ноября 2010 IQDDD, никак. В ЧН этот контрол такой-же нерабочий, как и в ТЧ. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
IQDDD 5 Опубликовано 26 Ноября 2010 Поделиться Опубликовано 26 Ноября 2010 (изменено) да я уж понял. приходится всплывающим листбоксом делать. зы: а по идее можно создать собственный ComboBox, используя классы CUIButtonWnd, CUIStaticWnd и CUIListWnd. Неполноценный, конечно, но всё равно. А есть коллбек на потерю фокуса окном? Изменено 26 Ноября 2010 пользователем IQDDD Ссылка на комментарий
Malandrinus 615 Опубликовано 26 Ноября 2010 Автор Поделиться Опубликовано 26 Ноября 2010 IQDDD, нету. Да и посмотри сам класс-перечисление ui_events. Там всё, что есть. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Real Wolf 34 Опубликовано 28 Ноября 2010 Поделиться Опубликовано 28 Ноября 2010 Всё таки мне не понятно как испольовать этот класс ui_events. Вот к примеру, что как использовать UNDRESS_OUTFIT? Ссылка на комментарий
Malandrinus 615 Опубликовано 29 Ноября 2010 Автор Поделиться Опубликовано 29 Ноября 2010 Real Wolf, класс ui_events непосредственно использовать нельзя. Это просто набор именованных целочисленных констант. Использовать можно класс CUIScriptWnd, где можно регистрировать события от дочерних окошек. Там эти константы и используются для указания, какое именно событие регистрируется. Это было описано в посте про окна. При этом, часть событий недоступна для использования, поскольку не экспортированы классы окон, которые их генерируют. В частности UNDRESS_OUTFIT бесполезен, поскольку генерируется классом окна инвентаря, а оно никак в скриптах не доступно. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
IQDDD 5 Опубликовано 29 Ноября 2010 Поделиться Опубликовано 29 Ноября 2010 почему же недоступно? доступно. но вот как обратиться к дочерним элементам-загадка. и зарегистрированы ли под именами-тоже. Ссылка на комментарий
Malandrinus 615 Опубликовано 29 Ноября 2010 Автор Поделиться Опубликовано 29 Ноября 2010 IQDDD, почему же недоступно? доступно В смысле доступны? Поясни, пожалуйста, или пример приведи. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Real Wolf 34 Опубликовано 29 Ноября 2010 Поделиться Опубликовано 29 Ноября 2010 и зарегистрированы ли под именами-тоже. Вроде имени нету, у меня возвращало nil. Ссылка на комментарий
DiXares 1 Опубликовано 2 Декабря 2010 Поделиться Опубликовано 2 Декабря 2010 Товарищи! В посте про СConsole говорится: local hud_crhr = con:get_bool("hud_crosshair") -- узнать, включён ли прицел (выдаст логическое значение) А если узнавать аргумент у не зарегистрированного? Например: local hud_crhr = con:get_bool("test") Можно так делать? Ссылка на комментарий
Malandrinus 615 Опубликовано 2 Декабря 2010 Автор Поделиться Опубликовано 2 Декабря 2010 DiXares, Нет же такой консольной команды "test". Вылет будет или nil вернёт - какая разница. По-любому нет смысла так делать. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
DiXares 1 Опубликовано 2 Декабря 2010 Поделиться Опубликовано 2 Декабря 2010 malandrinus, а можно как то в движок добавлять фейковые команды? В соседней теме где-то читал про то, как kolmogor показывал, как добавлять, но не нашёл... По идее, если сделать пару команд, то можно из консоли управлять скриптами. Ссылка на комментарий
Malandrinus 615 Опубликовано 2 Декабря 2010 Автор Поделиться Опубликовано 2 Декабря 2010 DiXares, можно добавлять. Пример там, посмотри в теме xray extentions. Там есть добавление команд. По идее, если сделать пару команд, то можно из консоли управлять скриптами. Наверное можно, только зачем это надо? Есть и другие способы во время игры выполнить произвольный скрипт. Даже если предположить реализацию с консолью. Как это будет выглядеть? Набираешь команду, аргумент - имя функции для выполнения. Так? А как передавать аргументы? Страшная морока для реализации. И по любому, не вижу в этом ровно никаких преимуществ перед существующими способами. Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
IQDDD 5 Опубликовано 5 Декабря 2010 Поделиться Опубликовано 5 Декабря 2010 1. Как узнать локацию серверного объекта? Смотрел справочник, смотрел состав net packet'ов, юзал поиск на форуме и google (возможно, плохо) - не нашёл. 2. Почему вызов level.add_map_object_spot_ser на объект из другой локации не ставит метку? (Перебирал все предметы alife'а, стоя на болотах. Метки появились только на болотах. Ссылка на комментарий
XMK 24 Опубликовано 7 Декабря 2010 Поделиться Опубликовано 7 Декабря 2010 (изменено) IQDDD Ты сам ответил себе на первый вопрос во втором. Локация серверного объекта - видимо текущая ЗЫ: 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 function check_type(obj) if obj then return type(obj) end end вернет тоже самое Изменено 7 Декабря 2010 пользователем XMK Ссылка на комментарий
Garry_Galler 7 Опубликовано 30 Декабря 2010 Поделиться Опубликовано 30 Декабря 2010 (изменено) А теперь, товарищи, дружно забудем такой архаизм как амкашную функцию разделения строки str_explode (и ее варианты в других модах) и начинаем пользоваться быстрыми методами: (несмотря на то, что код может показаться не очень компактным, легко заметить, что там всю основную работу выполняет одна строчка - все прочее - дань универсализму.) Авторы Gun12, Garry_Galler, Artos - изначально был мой вариант с одним шаблоном, потом Gun12 предложил более универсальный паттерн, Artos привел все в божеский вид, ну и общими усилиями получился такой вариант (последняя редакция - чисто моя) Аргументы: sStr -- cтрока для разбора Mode -- режим заполнения таблицы sDiv --сепаратор: если указываем, то обязательно указать режим Mode sPattern -- свой шаблон:если указываем, то в аргументе sDiv передать nil и обязательно указать режим Mode function StringSplit(sStr, Mode, sDiv, sPattern) local tRet = {} local sPatt if sDiv and not sPattern then --// если сепаратор задан: разделяем по нему --// если нет шаблона - используем универсальный sPatt = '[^%s%'..sDiv..']+' --// если сепаратор указан как nil, но указан шаблон: используем его elseif not sDiv and sPattern then sPatt=sPattern else--/ если сепаратор и шаблон не указаны: разделяем слова sPatt = '[%w%_]+' end if Mode == nil then --// обычный массив for sValue in sStr:gmatch(sPatt) do table.insert(tRet, sValue) end elseif Mode == true then --// таблица '[значение]=true' for sValue in sStr:gmatch(sPatt) do tRet[sValue] = true end elseif type(Mode) == "number" then --//таблица '[idx] = число или стринг' for sValue in sStr:gmatch(sPatt) do tRet[#tRet+1] = tonumber(sValue) or sValue end end return tRet end --вызовы local t =StringSplit("vid mode 1024x768", true, nil, "%d+") --используем свой шаблон для получения из строки двух цифр local t =StringSplit("ammo_9x18_fmj, ammo_9x18_pmm, ammo_11.43x23_fmj", 1,",") -- делим строку по разделителю-запятой -- делим строку на слова независимо от имеющихся разделителей local t =StringSplit(" There will come soft rains and the smell of the ground, And swallows circling with their shimmering sound") -- когда в строке имеется несколько видов сепараторов и нужно все их указать, можно сделать так: local s = "ammo_9x18_fmj, ammo_9x39_pab9! ammo_9x39_ap$ ammo_9x39_sp5? ammo_9x18_pmm; ammo_11.43x23_fmj" local t =StringSplit(s, true,",%;%?%!%$") Изменено 30 Декабря 2010 пользователем Garry_Galler Ссылка на комментарий
Scarabay 98 Опубликовано 31 Декабря 2010 Поделиться Опубликовано 31 Декабря 2010 Всех с наступающим! Подскажите, можно ли (и если да, то как) запретить выполнение какой-либо консольной команды? Мой YouTube-канал Ссылка на комментарий
Malandrinus 615 Опубликовано 31 Декабря 2010 Автор Поделиться Опубликовано 31 Декабря 2010 (изменено) Всех с наступающим Новым Годом! Scarabay, насколько я знаю, запретить выполнение консольных команд нельзя. Изменено 1 Января 2011 пользователем malandrinus Плагины Total Commander для работы с игровыми архивами: Архиваторный плагин (для работы с одиночным архивом): link1 link2 Системный плагин (для распаковки установленной игры): link1 link2 Ссылка на комментарий
Рекомендуемые сообщения
Создайте аккаунт или авторизуйтесь, чтобы оставить комментарий
Комментарии могут оставлять только зарегистрированные пользователи
Создать аккаунт
Зарегистрировать новый аккаунт в нашем сообществе. Это несложно!
Зарегистрировать новый аккаунтВойти
Есть аккаунт? Войти.
Войти